public
static
IEnumerable<TSource> MyWhere<TSource>(
this
IEnumerable<TSource> source, Func<TSource,
bool
> predicate)
{
foreach
(TSource item
in
source)
{
if
(predicate(item))
yield
return
item;
}
}
Yield迭代器,延迟计算
1) Yield迭代器
在上面定义的MyWhere扩展方法中,我们使用了yield迭代器。使我们不必“显示”实现IEnumerable或IEnumerator接口。只需要简单的使用 yield 关键字,由 JIT 编译器帮我们编译成实现 IEnumerable或IEnumerator 接口的对象(即:本质还是传统遍历,只是写法上非常简洁),就能使用foreach进行遍历。