我是一名.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> 添加了一个扩展方法,方法的参数是一个匿名委托。
现在对此只是一个初步的认识,还需要后续继续挖掘。。。