Bootstrap

18. 枚举器和迭代器

目录

18.1 枚举器和可迭代枚举

18.2 IEumerator接口

IEnumerable接口

使用IEnumerable和IEnumerator的示例

18.3 泛型枚举接口

18.4 迭代器

18.4.1 迭代器块

18.4.2 使用迭代器来创建枚举器

 18.4.3 使用迭代器来创建可枚举类型

18.5 常见迭代器模式

 18.6 产生多个可枚举类型

 18.7 将迭代器作为属性

18.8 迭代器实质 


18.1 枚举器和可迭代枚举

使用foreach语句;当我们使用foreach语句时,这个语句为我们以此取出数组中的每一个元素,允许我们读取它的值。之所以可以这样是因为数组可以按需提供一个枚举器(enumeator)的对象。枚举器可以依次返回请求的数组中的元素。枚举器知道项的次序并且跟踪他在序列中的位置,然后返回请求当前项。

对于有枚举器的类型而言,必须有一个方法来获取它。获取一个对象枚举器的方法是调用对象的GetEnumerator方法。实现GetEnumerator方法的类型叫做可枚举类型(enumerable type或enumerable)。数组是可枚举类型。

18.2 IEumerator接口

实现了IEnumerator接口的枚举器包含三个成员:Current、MoveNext以及Reset。

  • Current是返回序列中当前位置项的属性。
  1. 他是只读属性
  2. 他返回object类型的引用,所以可以返回任何类型。
  • MoveNext是枚举器位置前进到集合中下一项的方法。它也返回布尔值,指示新的位置是有效位置还是已经超过了序列的尾部。
  1. 如果新的位置是有效的返回true;
  2. 如果新的位置是无效的(比如当前位置到达尾部)方法返回false;
  3. 枚举器的原始位置在序列中的第一项之前,因此MoveNext必须在第一次使用Current之前调;
  • Reset是吧位置重置为原始状态的方法。

有了集合的枚举器,我们就可以使用MoveNext和Cureent来模仿foreach循环遍历集合中的项。

IEnumerable接口

可枚举类是指实现了IEnumerable接口的类。IEnumerable接口只有一个成员——GetEnumerator方法,它返回对象的枚举器。

使用IEnumerable和IEnumerator的示例

 

;