.Net2.0如何实现GetEnumerator()方法

it2022-05-09  32

 用yield关键字构建迭代器方法

在以前,如果我们希望构建支持foreach枚举的自定义集合(如Garage),只能实现IEnumerable接口(可能还有IEnumerator接口)。然而,从.NET 2.0发布以来,还可以通过迭代器来构建使用foreach的类型。

简单来说,迭代器就是这样一个成员方法,它指定了容器内部项被foreach处理时该如何返回。虽然迭代器方法还是必须命名为GetEnumerator(),返回值还是必须为IEnumerator类型,但自定义类不需要实现原来那些接口了:

public class Garage{private Car[] carArray = new Car[4];...// 迭代器方法。public IEnumerator GetEnumerator(){foreach (Car c in carArray){yield return c;}}}

注意,这个GetEnumerator()的实现使用内部foreach逻辑迭代每个子项,使用新的yield返回语法向调用方返回每个Car对象。yield关键字用来向调用方foreach指定返回值。当到达yield返回语句后,当前位置被存储下来,下次调用迭代器时会从这个位置开始执行。

迭代器方法不一定要通过foreach关键字来返回内容。我们也可以如下定义迭代器方法:

public IEnumerator GetEnumerator(){yield return carArray[0];yield return carArray[1];yield return carArray[2];yield return carArray[3];} 在这个实现中,注意GetEnumerator()方法显式返回新的值给调用者。虽然对于这个示例来说意义不是很大,因为如果我们为carArray成员变量增加更多对象的话,GetEnumerator()方法就不会同步。但是,如果我们希望方法返回能被foreach语法处理的局部数据,这个语法就很有用。

转载于:https://www.cnblogs.com/tuyile006/archive/2009/07/29/1533958.html

相关资源:数据结构—成绩单生成器

最新回复(0)