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

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

         

  • 相关阅读:
    faster rcnn流程
    本质矩阵E求解及运动状态恢复
    对极几何
    仿射变换与投影变换
    SVD分解及线性最小二乘问题
    常见的网络结构
    Docker swarm 获取service的container信息
    XNginx升级记录
    sparql 查询语句快速入门
    开源音乐下载神器XMusicDownloader更新,支持歌单一键下载,支持无损音乐
  • 原文地址:https://www.cnblogs.com/perzy/p/Lambda.html
Copyright © 2020-2023  润新知