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 技术和源代码。
一个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 技术和源代码。
相关文章推荐
- C++11新特性中的匿名函数Lambda表达式的汇编实现分析
- Lambda表达式现状分析
- Java 8 动态类型语言Lambda表达式实现原理分析
- C++11新特性中的匿名函数Lambda表达式的汇编实现分析(一)
- Java 8 动态类型语言Lambda表达式实现原理分析
- C++11新特性中的匿名函数Lambda表达式的汇编实现分析(二)
- C++11新特性中的匿名函数Lambda表达式的汇编实现分析(三)
- Android 里用lambda表达式的优劣分析
- C++11新特性中的匿名函数Lambda表达式的汇编实现分析
- c++11特性之Lambda表达式
- 第一章 lambda表达式
- C# Lambda 表达式
- Java 高级特性: Lambda 表达式
- Java 8来了!!! 极客学院推出中国第1个Java8课程,详解Lambda 表达式
- 深入分析JavaWeb Item48 -- Struts2中OGNL表达式与ValueStack
- Java8新特性Lambda表达式的一些复杂用法总结
- C++ 11 Lambda表达式
- Java Lambda表达式入门
- 表达式语法分析——预测分析法
- Lambda 表达式有何用处?