而迭代器模式就是为解决这个问题而生的:提供一种一致的方式访问集合对象中的元素,而无需暴露集合对象的内部表示。假如有如下的代码:下面是它对应的IL代码:从.locals init 那里可以看出编译器为我们添加了两个局部变量,一个就是迭代器。细心读者会发现上面的IL代码,判断迭代器对象是否是一个IDisposable实例,如果是,那就要调用它的Dispose()方法了(为啥它要实现IDisposable接口?那肯定这个迭代器里使用了一些非托管资源)。

C#特性-迭代器(上)及一些研究过程中的副产品

C#特性-迭代器(上)及一些研究过程中的副产品

C#特性-迭代器(上)及一些研究过程中的副产品

C#特性-迭代器(上)及一些研究过程中的副产品

C#特性-迭代器(上)及一些研究过程中的副产品

C#特性-迭代器(上)及一些研究过程中的副产品

C#特性-迭代器(上)及一些研究过程中的副产品