.NET 3.x新特性之Lambda表达式
来源:互联网 发布:邪恶力量 知乎 编辑:程序博客网 时间:2024/06/05 09:56
又来抄袭了,呵呵。不过我信奉,好东西要留在自己手里。
我抄袭的地址:http://dev.yesky.com/msdn/296/7548296.shtml
随着岁月的流逝,VS也从2005慢慢的步入2008,.NET也将进入3.5版本,学习的脚步也要慢慢赶上。今天我们来看看C#3.0的又一特性Lambda表达式,它由2.0代理演化而来,也是为LinQ做好必要的准备。Lambda表达式首先我们要知道他的运算符“=>”,在我以前的一篇文章中可以得到在不同版本中所使用代理和通过Lambda表达式的一个例子,你可以在这里看到:[C#3.0]新特性概览.今天我们举个另外的例子,让我们更好的理解这个Lambda表达式,因为我们在LinQ中会经常用到这个东东,所以就应该好好看看,况且这也不是什么难事。
我们在[.NET 3.x新特性一]自动属性,对象初始化及集合初始化中讲到了自动化属性和集合的初始化,为了讲解Lambda表达式我们首先定义一个实体类,代码如下:
1 public class Person
2 {
3 public string Name { get; set; }
4 public string NickName { get; set; }
5 public int Age { get; set; }
6 }
我们将其初始化一个List
1 List<Person> people = new List<Person>
2 {
3 new Person{Name="小兵",NickName="网魂小兵",Age=23},
4 new Person{Name="青青",NickName="QQing",Age=22}
5 };
6 //取得people中Age为23的Person实例。
7 IEnumerable<Person> results = people.Where(p => p.Age == 23);
8 //计算people中的平均岁数。
9 int perAge = people.Average(p => p.Age);
看到Lambda表达式了吗?p=>p这个就是Lambda表达式,当然Where和Average就是扩展方法,是LinQ的一个扩展方法。当然我们在C#或者说在.NET 2.0中也能够做到,但是可没有那么简单(其实也不难),下面我们看一下在.NET 2.0中的实现方法:
1 List<Person> people = new List<Person>
2 {
3 new Person{Name="小兵",NickName="网魂小兵",Age=23},
4 new Person{Name="青青",NickName="QQing",Age=22}
5 };
6
7 IEnumerable<Person> results = people.Where(delegate(Person p) { return p.Age == 23; });
8
9 int perAge = people.Sum(delegate(Person p) { return p.Age; });
从上面我们也能够做到同样的效果,但是代码比用Lambda复杂了一点。下面我们看看这种代理方法的扩展是如何实现的呢?首先我们当然是右键选择"转到定义"就可以看到Where的扩展:
1 public static IEnumerable<TSource> Where<TSource>(
2 this IEnumerable<TSource> source, Func<TSource, bool> predicate);
3public static IEnumerable<TSource> Where<TSource>(
4 this IEnumerable<TSource> source, Func<TSource, int, bool> predicate);
我们来看看Where的代码:
1 public static IEnumerable<TSource> Where<TSource>(this IEnumerable<TSource> source,
2 Func<TSource, bool> predicate)
3 {
4 foreach (TSource s in source)
5 {
6 if (predicate(s))
7 {
8 yield return s;
9 }
10 }
11 }
从上面的代码中我们可以看出是对IEnumerable
- .NET 3.x新特性之Lambda表达式
- .NET 3.x新特性之Lambda表达式
- [.NET 3.x新特性三]Lambda表达式
- Java 8 新特性之 Lambda 表达式
- C++ 11 新特性之 lambda表达式
- C++11 新特性之 Lambda表达式
- JDK8新特性之Lambda表达式
- Java 8 新特性之 Lambda表达式
- java8新特性之lambda表达式(一)
- java8新特性之lambda表达式(二)
- JDK8新特性之Lambda表达式
- Java8新特性之lambda表达式
- jdk8新特性之lambda表达式
- jdk1.8 新特性之 lambda表达式
- Java8新特性之(lambda表达式)
- C++11 新特性之Lambda表达式
- Java8新特性之lambda表达式
- Java新特性之二Lambda表达式
- Dev-C++ 调试方法简明图文教程
- [Flex]FileReference的一个bug!?
- 浅谈Linux的可执行文件格式ELF
- [Flex]在Flex中传递参数
- 翻译《real-time 3d terrain engines using C++ and DX9 》(3)
- .NET 3.x新特性之Lambda表达式
- 我的测试文章
- js关闭IE窗口
- 一个将类的构造函数调用识别成函数指针的问题
- JavaScript Tips for Novices, Acolytes, and Gurus
- 翻译《real-time 3d terrain engines using C++ and DX9 》(4)
- Tcp三次握手与四次挥手
- Google有Google地图,Yahoo也有Yahoo路客
- Windows黑客编程基础