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