C#高级编程之Lambda表达式
C#的Lambda表达式,如果你第一接触这个专业术语,听这个名字你完全不知道它是干嘛的。那问题就来了(放心不是去蓝翔学挖掘机)。
创新互联建站专注于黄南州网站建设服务及定制,我们拥有丰富的企业做网站经验。 热诚为您提供黄南州营销型网站建设,黄南州网站制作、黄南州网页设计、黄南州网站官网定制、微信小程序服务,打造黄南州网络公司原创品牌,更为您提供黄南州网站排名全网营销落地服务。
它到底是什么呢?
说明这个问题需要借助代码,给予简单描述。代码如下:
public delegate int deleArgu(int x);//委托 //... //... int y = 0; mydeleArgu=x=>{return x*x;};//这就是一个Lambda表达式。 y=mydeleArgu(5);//结果y=25;
由上面所看到的x=>{return x*x};这就是一个Lambda表达式,它其实就是一个匿名函数。那接下来的问题就出现了。
2.什么是匿名函数?
我也是借用几行代码说明,代码如下:
public delegate int deleArgu(int x);//委托 mydeleArgu = delegate(int x){return x*x;}; Console.WriteLine(mydeleArgu(5));//输出为25;
上面的代码中mydeleArgu = delegate(int x){return x*x;};这就是一个匿名函数。这个事在.Net FrameWork 2.0后加入的概念。在.Net FrameWork 1.0的委托是把指针指向一个函数,那么名字叫什么,阿猫阿狗都无所谓了,名字不再重要,所以在这个地方提供了匿名方法。
3.Lambda表达式是怎么来的?
到了后来.Net Framework 3.5之后就更加的改进了,如下代码:
public delegate String deleTransfer(string s); deleTransfer =s=>s.Substring(0,1).toUpper()+s.Substring(1).toLower();//首字母大写,其他小写 Console.WriteLine(deleTransfer("abdDEF"));//结果"Adbef"
上面的部分就是带一个参数的Lambda表达式。是不是感觉它就是一个匿名方法?没错!它就是这样的。
我们很快就看清Lambda表达式的发展脉络,它是委托和匿名方法过渡而来的,和匿名方法很相似。
总结:(来自官方文档)
=> 运算符具有与赋值运算符 (=) 相同的优先级并且是右结合运算(参见“运算符”文章的“结合性”部分)。
Lambda 在基于方法的 LINQ 查询中用作标准查询运算符方法(如 Where)的参数。
使用基于方法的语法在 Enumerable 类中调用 Where 方法时(如在 LINQ to Objects 和 LINQ to XML 中一样),参数是委托类型 System.Func
在上一个示例中,请注意委托签名具有一个 int 类型的隐式类型输入参数,并返回 int。 可以将 Lambda 表达式转换为该类型的委托,因为该表达式也具有一个输入参数 (x),以及一个编译器可隐式转换为 int 类型的返回值。(以下几节中将对类型推理进行详细讨论。)使用输入参数 5 调用委托时,它将返回结果 25。在 is 或 as 运算符的左侧不允许使用 Lambda。适用于匿名方法的所有限制也适用于 Lambda 表达式
表达式位于 => 运算符右侧的 lambda 表达式称为“表达式 lambda”。 表达式 lambda 广泛用于表达式树(C# 和 Visual Basic)的构造。 表达式 lambda 会返回表达式的结果,并采用以下基本形式:
(input parameters) => expression;
语句 lambda 与表达式 lambda 表达式类似,只是语句括在大括号中:
(input parameters) => {statement;};
更多信息查询官方文档。
文章名称:C#高级编程之Lambda表达式
当前链接:http://pwwzsj.com/article/pciepp.html