前面我们对LINQ的本质,以及MS针对LINQ对3.5新增的几个类做了分析。作为本系列的第一篇:基础与本质的最后一篇,我想对Lambda表达式讲解一下。本来Lambda表达式也可以放到系列c#3.x学习中,我想还是放到LINQ系列比较好讲一些。
1 Lambda表达式例子
先来熟悉一下Lambda的一般样子,代码:
1 x => x * 2;
2 (x, y) => x * 10 + y;
3 (x, y, z) => (1 / x + 10) * y + z;
4 Func<int, int> f1;
5 f1 = x => x * 2;
6 Func<int, int, int> f2;
7 f2 = (x, y) => x * 10 + y;
8 Func<int, int, int, int> f3;
9 f3 = (x, y, z) => (1 / x + 10) * y + z;
10 // A lambda expression with no arguments
11 Func<int> f4 = ()=> 10;
12 int r1 = f1(10);
13 int r2 = f2(5, 10);
这些是C#3.0新特性为Lambda定义的格式。
Func<int, int> f1 = x => x * 2;<=> Func<int, int> f1 = delegate(int x){return x * 2;};
我们说这两种方式可以说在某种情况下是等价的,为什么等价的呢?请看本文的第二部分的分析。
2 Lambda 表达本质
Lambda 表达式可以用在任何需要使用匿名方法,或是代理的地方。我们看看下面的代码:
1 List<int> numbers = new List<int>{ 10, 20, 28, 40, 1, 3, 5, 8 };
2 List<int> evenNumbers = numbers.FindAll( i => ( i % 2 ) == 0 );
3 List<int> evenNumbers1 = numbers.FindAll( delegate( int i )
4 {
5 return ( i % 2 ) == 0;
6 } );
版权与免责声明
1、本站所发布的文章仅供技术交流参考,本站不主张将其做为决策的依据,浏览者可自愿选择采信与否,本站不对因采信这些信息所产生的任何问题负责。
2、本站部分文章来源于网络,其版权为原权利人所有。由于来源之故,有的文章未能获得作者姓名,署“未知”或“佚名”。对于这些文章,有知悉作者姓名的请告知本站,以便及时署名。如果作者要求删除,我们将予以删除。除此之外本站不再承担其它责任。
3、本站部分文章来源于本站原创,本站拥有所有权利。
4、如对本站发布的信息有异议,请联系我们,经本站确认后,将在三个工作日内做出修改或删除处理。
请参阅权责声明!