在实现迭代器时,返回IEnumerator或IEnumerable之间有什么区别?

use*_*414 5 .net c# c#-4.0

在使用迭代器时yield return,返回IEnumeratorIEnumerable?之间有什么区别?

SLa*_*aks 9

IEnumerable并且IEnumerator是两件不同的事情.

IEnumerable<T> 是一个可以迭代的序列.

IEnumerator<T>是一个IEnumerable<T>在序列上迭代一次的对象.

通常,返回的唯一地方IEnumerator<T>GetEnumerator()方法.

yield return两种类型的行为方式相同,只是返回的迭代器方法IEnumerable<T>可以执行多次(每次枚举序列时).
有关其工作原理的更多信息,请参阅Jon Skeet的文章.