Lambda表达式
作为LINQ所必须的众多新语言特性之一,我们接下来将要介绍的是来自于Lambda演算世界中的Lambda表达式。很多函数式编程语言,例如Lisp,都是用Lambda表达式来定义函数。除了为支持LINQ查询语句之外,C#和VB.NET中引入的Lambda表达式还可以被认为是漆走向函数式语言的重要一步。
Lambda表达式与匿名方法比较
C#2.0中引入的匿名方法允许我们把原本要用委托传入的参数直接以“内联”的方式提供。匿名方法的语法较为冗长,且需要严格遵守其规范。而Lambda表达式则显得更为简洁,直接将函数式编程中的精彩表达能力引入到了代码中。
在功能上,我们可以认为Lambda表达式是匿名方法的一个超集。除了匿名方法能够实现的功能之外,Lambda表达式还提供了如下一些额外的功能:
Lambda表达式能够推测出参数的类型,因此程序中无需显示声明;
Lambda表达式支持用语句块或表达式作为方法体,语法上比匿名方法更加灵活(匿名方法的方法体只能为语句块);
在以参数形式传递时,Lambda表达式能够参与到参数类型推断以及对重载方法的选择中。注意:匿名方法也能够参与参数类型推断(推断返回值的类型);
带有表达式体的Lambda表达式能够转化为表达式树(表达式树将在下一章中介绍)。
Lambda表达式将新的语法引入到了C#和VB.NET中。在接下来的小节中,本书将介绍Lambda表达式的结构,并通过一些示例让你逐渐熟悉其使用方法。