zoukankan      html  css  js  c++  java
  • 初步理解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> 添加了一个扩展方法,方法的参数是一个匿名委托。

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

         

  • 相关阅读:
    Axis,axis2,Xfire以及cxf对比 (转)
    客户端调用服务器端三种方式
    webservice发送数据,取数据的方式
    强制关闭myeclipse出现的问题
    取当前系统的上月时间
    oracle 报Ora-01008错误:oracle 并非所有变量都已绑定的原因.TO_number();动态执行select..into..语句时
    ResultSetMetaData rsmd = rs.getMetaData()是什么意思?
    概率质量函数:怀孕周期的PMF
    Python 正则表达式
    TF-IDF
  • 原文地址:https://www.cnblogs.com/perzy/p/Lambda.html
Copyright © 2011-2022 走看看