Lambda表达式之进化(3)

上述代码说过可以精简,如何精简呢?那就是lambda表达式,匿名方法已经够简洁的了,但是lambda表达式是比匿名方法更加简洁的一种语法!我们用lambda表达式来分别实现上述中的Action、Predicate以及Func委托。

Action

var list = GetList(); list.ForEach(d=>Console.WriteLine(d.Name);)

Predicate

var list = GetList(); list.FindAll(d => d.Age > 13);

Func

list.Select(d => new Person() { Name = d.Name, Age = d.Age, Gender = d.Gender });
list.Select(d
=> new { Name=d.Name}); /*lambda表达式中的匿名类*/

好了,一切都变得如此明朗。自从有了lambda表达式,敲代码的速度加快了,妈妈再也不用担心我熬夜到很晚了。 

好了,问题来了,我们知道lambda表达式分为 语句lambda和表达式lambda  ,那么二者有何区别呢?从字面上理解语句lambda是不是就是用大括号括起来的呢?ok,给出代码来理解吧。

(string str) => { return str.length; } /*语句lambda(有大括号和return)*/ (string str) => str.length /*表达式lambda(没有大括号和return,只有一个式子)*/

那问题又来了,lambda表达式到底是什么呢?我们依然用反编译来查看  list.ForEach(d => Console.WriteLine(d.Age)); 对应的C#代码如下:

看ForEach()方法里面的参数意思大概是匿名方法委托,接着我们点击进去看看,代码如下:

我们接着点击Action看看,如下:

一下就豁然开朗了,这不正说明 lambda表达式的实质就是匿名方法 吗!所以现在想想,lambda表达式的本质是匿名方法,匿名方法的本质是通过委托实现的。应该就是这样了。

lambda表达式进化过程 

我们就一个扩展方法的实例来演示lambda表达式演变的过程是多么的惟妙惟肖。

假设如下场景:在花千骨电视中找出白子画出来,找对了你就赢了!我们获得给出一个花千骨众角色列表,再选出白子画即可。

/*根据条件找出所需,返回true你就赢了,反之则输*/ static bool SelDefine_Extension_IEnumerable<T>(this IEnumerable<T> source, Func<T, bool> func) { foreach (var item in source) { if (func(item)) { return true; } } return false; }

下面给出集合列表:

var list = new List<string>() { "花千骨", "白子画", "东方彧卿", "霓漫天", "糖宝", "落十一", "轻水", "孟玄朗" };

然后在控制台执行扩展方法进行查询,在此列出 lambda表达式6部曲 :

list.SelDefine_Extension_IEnumerable(new Func<string, bool>(delegate(string item) { return item.Equals("白子画"); })); list.SelDefine_Extension_IEnumerable(delegate(string item) { return item.Equals("白子画"); }); list.SelDefine_Extension_IEnumerable((string item) => { return item.Equals("白子画"); }); list.SelDefine_Extension_IEnumerable((string item) => item.Equals("白子画")); list.SelDefine_Extension_IEnumerable((item) => item.Equals("白子画")); list.SelDefine_Extension_IEnumerable(item => item.Equals("白子画"));

从开始的繁琐,复杂到最终的简洁,每一个过程微软大大也是作出一定的努力,先点给赞先!就上述用一副图来看,估计会更加清晰明了吧

lambda表达式演变六部曲

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/53547d1d0cbef5e6034011c3b3e6b0bd.html