Lambda 表达式.C# 编程指南.doc
《Lambda 表达式.C# 编程指南.doc》由会员分享,可在线阅读,更多相关《Lambda 表达式.C# 编程指南.doc(5页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、Lambda 表达式(C# 编程指南)Visual Studio 2010“Lambda 表达式”是一个匿名函数,它可以包含表达式和语句,并且可用于创建委托或表达式树类型。所有 Lambda 表达式都使用 Lambda 运算符 =,该运算符读为“goes to”。 该 Lambda 运算符的左边是输入参数(如果有),右边包含表达式或语句块。 Lambda 表达式 x = x * x 读作“x goes to x times x”。可以将此表达式分配给委托类型,如下所示:C#delegate int del(int i);static void Main(string args) del myD
2、elegate = x = x * x; int j = myDelegate(5); /j = 25创建表达式树类型:C#using System.Linq.Expressions;namespace ConsoleApplication1 class Program static void Main(string args) Expression myET = x = x * x; = 运算符具有与赋值运算符 (=) 相同的优先级,并且是右结合运算符。Lambda 在基于方法的 LINQ 查询中用作标准查询运算符方法(如 Where)的参数。使用基于方法的语法在 Enumerable 类中
3、调用 Where 方法时(像在 LINQ to Objects 和 LINQ to XML 中那样),参数是委托类型 System.Func。 使用 Lambda 表达式创建委托最为方便。 例如,当您在 System.Linq.Queryable 类中调用相同的方法时(像在 LINQ to SQL 中那样),则参数类型是 System.Linq.Expressions.Expression,其中 Func 是包含至多十六个输入参数的任何 Func 委托。 同样,Lambda 表达式只是一种用于构造表达式树的非常简练的方式。 尽管事实上通过 Lambda 创建的对象的类型是不同的,但 Lambd
4、a 使得 Where 调用看起来类似。在前面的示例中,请注意委托签名具有一个 int 类型的隐式类型输入参数,并返回 int。 可以将 Lambda 表达式转换为该类型的委托,因为该表达式也具有一个输入参数 (x),以及一个编译器可隐式转换为 int 类型的返回值。 (以下几节中将对类型推理进行详细讨论。)使用输入参数 5 调用委托时,它将返回结果 25。在 is 或 as 运算符的左侧不允许使用 Lambda。适用于匿名方法的所有限制也适用于 Lambda 表达式。 有关更多信息,请参见 匿名方法(C# 编程指南)。Lambda 表达式表达式在右边的 Lambda 表达式称为“Lambda
5、表达式”。 Lambda 表达式在构造表达式树(C# 和 Visual Basic)时广泛使用。 Lambda 表达式返回表达式的结果,并采用以下基本形式:复制(input parameters) = expression只有在 Lambda 有一个输入参数时,括号才是可选的;否则括号是必需的。 两个或更多输入参数由括在括号中的逗号分隔:(x, y) = x = y有时,编译器难于或无法推断输入类型。 如果出现这种情况,您可以按以下示例中所示方式显式指定类型:(int x, string s) = s.Length x使用空括号指定零个输入参数:() = SomeMethod()在上一个示例中
6、,请注意 Lambda 表达式的主体可以包含方法调用。 但是,如果要创建将在另一个域(比如 SQL Server)中使用的表达式树,则不应在 Lambda 表达式中使用方法调用。 方法在 .NET 公共语言运行时上下文的外部将没有意义。Lambda 语句Lambda 语句与 Lambda 表达式类似,只是语句括在大括号中:(input parameters) = statement;Lambda 语句的主体可以包含任意数量的语句;但是,实际上通常不会多于两个或三个语句。delegate void TestDelegate(string s);TestDelegate myDel = n = s
7、tring s = n + + World; Console.WriteLine(s); ;myDel(Hello);像匿名方法一样,Lambda 语句无法用于创建表达式树。带有标准查询运算符的 Lambda许多标准查询运算符都具有输入参数,其类型是泛型委托的 Func 系列的其中之一。 Func 委托使用类型参数定义输入参数的数目和类型,以及委托的返回类型。 Func 委托对于封装应用于一组源数据中每个元素的用户定义表达式非常有用。 例如,假设有以下委托类型:public delegate TResult Func(TArg0 arg0)可以将委托实例化为 Func myFunc,其中 in
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Lambda 表达式.C# 编程指南 表达式 C# 编程 指南
限制150内