代码改变世界

lamda中where的源码分析

2013-01-10 18:45  甘超波  阅读(2264)  评论(2编辑  收藏  举报

下面是Enumerable.Where 中简单用法

 1      static void Main(string[] args)
 2         {
 3             List<string> list = new List<string> {"aa","abb","cc","add" };
 4             IEnumerable<string> date = list.Where<string>(t => string.Compare(t, "aa", true) == 0);
 5            foreach (var d in date)
 6            {
 7                Console.WriteLine(d);
 8            }
 9            Console.ReadKey();
10             
11         }

用法很简单但是你知道里面是怎样工作的吗。

下面我们来看一下Enumerable.Where内部的实现原理是使用迭代器(对迭代器不是很熟悉的朋友请参考

迭代器的使用:http://www.cnblogs.com/zhili/archive/2012/12/02/Interator.html

我们知道迭代器中最主要是MoveNext方法。推测出where实现代码-->

推测的原理请参考老赵的一篇文章  http://www.cnblogs.com/JeffreyZhao/archive/2010/01/26/1655520.html (很详细)

以上是自己看老赵的 人肉反编译使用yield关键字的方法,推测出来,欢迎各位来交流