一尘不染

谁能向我解释IEnumerable和IEnumerator?[关闭]

c#

谁能向我解释IEnumerable和IEnumerator?

例如,何时在foreach上使用它?IEnumerable和IEnumerator有什么区别?我们为什么需要使用它?


阅读 316

收藏
2020-05-19

共1个答案

一尘不染

例如,何时在foreach上使用它?

您不使用IEnumerable“ over” foreach。实现IEnumerable使使用成为foreach 可能

当您编写如下代码时:

foreach (Foo bar in baz)
{
   ...
}

它在功能上等同于编写:

IEnumerator bat = baz.GetEnumerator();
while (bat.MoveNext())
{
   bar = (Foo)bat.Current
   ...
}

我所说的“功能等效”实际上是编译器将代码转换成的功能。不能使用foreachbaz在这个例子中 ,除非
baz器具IEnumerable

IEnumerable表示baz实现该方法

IEnumerator GetEnumerator()

IEnumerator此方法返回的对象必须实现这些方法

bool MoveNext()

Object Current()

第一种方法前进到IEnumerable创建枚举器的对象中的下一个对象,false如果完成,则返回,第二种方法返回当前对象。

.Net中可以迭代实现的任何内容IEnumerable。如果您要构建自己的类,并且该类尚未从实现的类继承IEnumerable,则可以foreach通过实现IEnumerable(并创建其新GetEnumerator方法将返回的枚举器类)使该类在语句中可用。

2020-05-19