日期:2014-05-17  浏览次数:20912 次

IEnumerable 的实现。
//首先,我会一点关于如何实现 IEnumerable。
//以下是我在用的时候发现的问题。
IEnumerable<int> aa = null;
//话说 IEnumerable<T> 里不是只有一个方法么?下面这句怎么解释?
aa.Where(i => i == 1);//居然是定义在 Enumerable 里?

//提供一组
//用于查询实现
//System.Collections.Generic.IEnumerable<T> 的对象的
//static(在 Visual Basic 中为 Shared)方法。

//方法名为什么不在 IEnumerable 里定义?

//居然还有很多?
aa.AsQueryable();//定义在 Queryable 里,实现 IQueryable 继承 IEnumerable。
aa.AsParallel(); //定义在 ParallelEnumerable 里,实现 ParallelQuery继承 IEnumerable。

//这些方法是带参数的,怎么有些在调用时不放参数也行?
//aa.Cast<T>()很好用!

//等等等……另外 ParallelEnumerable 与 Enumerable 是并行等效项,并行等效项是什么?听上去有点像 partial class?
//最后
Enumerable.Where(aa, i => i == 1);
aa.Where(i => i == 1);
//Where是一个Enumerable里的同一个方法……好吧。

------解决方案--------------------

Where是一个扩展方法
里面是一个Func委托
这种形式就是所谓的lambda表达式
至于后面的AsQueryable,AsParallel,Cast等都是扩展方法

看看扩展方法的定义及应用吧
扩展方法(C# 编程指南)
http://msdn.microsoft.com/zh-cn/library/bb383977.aspx