例如,何时在foreach上使用它?
您不使用
IEnumerable“ over”
foreach。实现
IEnumerable使使用成为
foreach可能 。
当您编写如下代码时:
foreach (Foo bar in baz){ ...}它在功能上等同于编写:
IEnumerator bat = baz.GetEnumerator();while (bat.MoveNext()){ bar = (Foo)bat.Current ...}我所说的“功能等效”实际上是编译器将代码转换成的功能。不能使用
foreach在
baz在这个例子中 ,除非
baz器具
IEnumerable。
IEnumerable表示
baz实现该方法
IEnumerator GetEnumerator()
IEnumerator此方法返回的对象必须实现这些方法
bool MoveNext()
和
Object Current()
第一种方法前进到
IEnumerable创建枚举器的对象中的下一个对象,
false如果完成,则返回,第二种方法返回当前对象。
.Net中可以迭代实现的任何内容
IEnumerable。如果您要构建自己的类,并且该类尚未从实现的类继承
IEnumerable,则可以
foreach通过实现
IEnumerable(并创建其新
GetEnumerator方法将返回的枚举器类)使该类在语句中可用。


![谁能向我解释IEnumerable和IEnumerator?[关闭] 谁能向我解释IEnumerable和IEnumerator?[关闭]](http://www.mshxw.com/aiimages/31/452055.png)
