初步理解Lambda表达式的简单实现

     我是一名.NET新人,Coding的时间不太长,经验不足。平时在Coding的过程中,可能会喜欢直接使用.NET的最新特性。因为方便和容易记忆,所以平时常写的一些用法虽然知道这样用,可以实现逻辑,但是对具体的实现机理不是了解的很透彻,以至于要实现一些更高级的功能或者是对现成的代码做一些扩展,变成一件很费力的事情。平且还不一定能够实现。

     就比如说平时写Linq,一贯用法都是直接写Lambda表达式。用起来很爽,但是却不明白为什么这样做就能得到想要的结果。

	List<int> list = new List<int>(){1,2,3,4,5,6,7,8,9,10};
	var results = list.Where( o => o > 6);

  上面的写法是一种Lambda写法,真是一中很好的语言特性,在Coding过程中不仅书写方便、语义清晰,而且代码优雅易懂。

      但是上面的list.Where(xxx) 内部是如何实现的呢? 具体的我不是很明白,有时间得花时间好好理解下底层的做法和实现。

      今天,心情有点好,哈哈。突然想自己实现一个简单的Lambda表达式,于是用LinqPad开始构思最简单的实现逻辑。

      以下是一个粗虐的模拟:

  

 1 void Main()
 2 {
 3     List<int> list = new List<int>(){1,2,3,4,5,6,7,8,9,10};
 4     var results1 = list.MyWhere( o => o > 6);
 5     foreach (var item in results1)
 6     {
 7         item.Dump();  //print out  7 8 9 10
 8     }
 9     var results2 = list.MyWhere( o => o % 2 == 0); // print out 2 4 6 8 10
10     foreach (var item in results2)
11     {
12         item.Dump();
13     }
14 }
15 
16 public static class MyLambda
17 {
18     public static Func<int,bool> filte;
19     public static IEnumerable MyWhere(this List<int> list ,Func<int,bool> filte){
20         var newList = new List<int>();
21         foreach (var item in list)
22         {
23             if(filte != null){
24                 if(filte(item)){
25                     newList.Add(item);
26                 }
27             }
28         }
29         return newList;
30     }
31 }

  我为 List<int> 添加了一个扩展方法,方法的参数是一个匿名委托。

  现在对此只是一个初步的认识,还需要后续继续挖掘。。。

     

原文地址:https://www.cnblogs.com/perzy/p/Lambda.html