Iterator迭代器和foreach循环
Iterator迭代器是设计模式中较为常见的一种,它的意图是提供一种方法顺序访问一个聚合对象中的各个元素而不暴露对象的内部表示。一般而言,Current Item返回当前正在访问的元素,从First开始,通过Next操作逐步执行到最后一个元素从而对容器完成一次访问。
在C#中提供的foreach就是通过迭代器访问容器内元素的一种操作。要使用foreach,容器必须是IEnumerable的实现。
关于IEnumerable,通过MSDN上关于IEnumerable 的说明可以了解到实现这个接口只需要实现
IEnumerator GetEnumerator();
这个函数用于返回一个遍历容器的迭代器。这里的IEnumerator是C#中迭代器的抽象接口,这个接口只有两个方法和一个属性
object Current { get; }
bool MoveNext();
void Reset();
和迭代器的一般模式无异,只不过增加了一个Reset操作。
这里需要注意的是,IEnumerable和IEnumerator都有对应的泛型版本IEnumerable<T>和IEnumerator<T>。
IEnumerable<T>的GetEnumerator()返回的是IEnumerator<T>。IEnumerator<T>的Current的返回类型是T而不是object