您的位置:首页 > 其它

Lambda 表达式分析

2008-06-28 16:50 120 查看
[align=center]Lambda 表达式分析[/align]

一个Lambda 表达式是这样编写的:首先定义一个参数列表,“=>”标记(针对Lambda运算符的C#标记全部来自Lambda演算)紧随其后,然后就是表达式。

The => token is called the lambda operator. It is used in lambda expressions to separate the input variables on the left side from the lambda body on the right side. Lambda expressions are inline expressions similar to anonymous methods but more flexible; they are used extensively in LINQ queries that are expressed in method syntax. The => operator is read as "goes to."--- FROM MSDN

LINQ to Object 和 Lambda 表达式示例:
[align=left] List<Person> people = new List<Person> {[/align]
[align=left] new Person { ID = 1,[/align]
[align=left] IDRole = 1,[/align]
[align=left] LastName = "Anderson",[/align]
[align=left] FirstName = "EntLib"},[/align]
[align=left] new Person { ID = 2,[/align]
[align=left] IDRole = 2,[/align]
[align=left] LastName = "Gray",[/align]
[align=left] FirstName = "Tom"},[/align]
[align=left] new Person { ID = 3,[/align]
[align=left] IDRole = 2,[/align]
[align=left] LastName = "Grant",[/align]
[align=left] FirstName = "Mary"}[/align]
[align=left] };[/align]
[align=left] [/align]
[align=left] var query = from p in people[/align]
[align=left] where p.FirstName == "EntLib"[/align]
[align=left] select p;[/align]
[align=left] ObjectDumper.Write(query);[/align]
[align=left] [/align]
[align=left] query = people.Where((p, index) => p.IDRole == index);[/align]
[align=left] [/align]
ObjectDumper.Write(query);

其中(p, index) 就是参数列表,p.IDRole==index 就是表达式。Lambda 表达式的参数既可以是显式类型化的,也可以是隐式类型化的。编译器可以根据整个Lambda 表达式的上下文推断出参数的类型。

在C# 3.0 LINQ代码中,可以方便使用Lambda 表达式来建立查询表达式,任何要求delegate参数的方法,都可以传入一个Lambda 表达式。

C# 3.0 中也允许使用一系列代码语句来定义Lambda 表达式,当表达式必须使用多行代码处理参数时,可以使用一对大括号确定这些语句的范围。
query = people.Where((p, index) =>{
Console.WriteLine("Hello, EntLib.com");
Console.WriteLine("Value of index is :{0}", index);
return p.IDRole == index;
});

EntLib.com 开源论坛开发小组,欢迎交流、分享.Net 技术和源代码。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: