目录
18.1 枚举器和可迭代枚举
使用foreach语句;当我们使用foreach语句时,这个语句为我们以此取出数组中的每一个元素,允许我们读取它的值。之所以可以这样是因为数组可以按需提供一个枚举器(enumeator)的对象。枚举器可以依次返回请求的数组中的元素。枚举器知道项的次序并且跟踪他在序列中的位置,然后返回请求当前项。
对于有枚举器的类型而言,必须有一个方法来获取它。获取一个对象枚举器的方法是调用对象的GetEnumerator方法。实现GetEnumerator方法的类型叫做可枚举类型(enumerable type或enumerable)。数组是可枚举类型。
18.2 IEumerator接口
实现了IEnumerator接口的枚举器包含三个成员:Current、MoveNext以及Reset。
- Current是返回序列中当前位置项的属性。
- 他是只读属性
- 他返回object类型的引用,所以可以返回任何类型。
- MoveNext是枚举器位置前进到集合中下一项的方法。它也返回布尔值,指示新的位置是有效位置还是已经超过了序列的尾部。
- 如果新的位置是有效的返回true;
- 如果新的位置是无效的(比如当前位置到达尾部)方法返回false;
- 枚举器的原始位置在序列中的第一项之前,因此MoveNext必须在第一次使用Current之前调;
- Reset是吧位置重置为原始状态的方法。
有了集合的枚举器,我们就可以使用MoveNext和Cureent来模仿foreach循环遍历集合中的项。
IEnumerable接口
可枚举类是指实现了IEnumerable接口的类。IEnumerable接口只有一个成员——GetEnumerator方法,它返回对象的枚举器。
使用IEnumerable和IEnumerator的示例