免责声明:我明白之间的差别IEnumerable<T>
,并 IEnumerator<T>
和如何使用这两种.这与此或此不重复.
这更像是一个设计问题 - 因为IEnumerator<T>
已经封装了可以枚举的所有必要信息(.Current
,.MoveNext()
),那么引入一个type(IEnumerable<T>
)的目的是什么呢?它的唯一目的是返回前者的实例?
再具体一点:
为什么不能foreach
设计为直接迭代IEnumerator<T>
,如下所示:
// foreach (var e in anEnumerator) { //... }
while (anEnumerator.MoveNext())
{
doSomething(anEnumerator.Current);
}
Run Code Online (Sandbox Code Playgroud)为什么不能直接建立Linq IEnumerator<T>
?
Ree*_*sey 57
这两个接口各自代表非常不同的概念. IEnumerable<T>
是"允许枚举"的东西,其中IEnumerator<T>
是枚举本身的表示.
如果要将这些合并在一起,则不可能同时枚举单个集合(没有其他一些机制).例如,执行foreach
数组的两个线程将不再起作用,这在当前设计中是完全可接受的.