用yield关键字构建迭代器方法
在以前,如果我们希望构建支持foreach枚举的自定义集合(如Garage),只能实现IEnumerable接口(可能还有IEnumerator接口)。然而,从.NET 2.0发布以来,还可以通过迭代器来构建使用foreach的类型。
简单来说,迭代器就是这样一个成员方法,它指定了容器内部项被foreach处理时该如何返回。虽然迭代器方法还是必须命名为GetEnumerator(),返回值还是必须为IEnumerator类型,但自定义类不需要实现原来那些接口了:
public class Garage |
注意,这个GetEnumerator()的实现使用内部foreach逻辑迭代每个子项,使用新的yield返回语法向调用方返回每个Car对象。yield关键字用来向调用方foreach指定返回值。当到达yield返回语句后,当前位置被存储下来,下次调用迭代器时会从这个位置开始执行。
迭代器方法不一定要通过foreach关键字来返回内容。我们也可以如下定义迭代器方法:
public IEnumerator GetEnumerator() |