c# – 为什么有IEnumerator需要IEnumerable?

免责声明:我了解IEnumerable< T>和IEnumerator< T>以及如何使用两者。这不是thisthis的重复。

这更像是一个设计问题 – 因为IEnumerator< T>已经封装了可以枚举的所有必需信息(.Crent,.MoveNext()),那么引入一个唯一目的是返回前者的实例的类型(IEnumerable?T)的意义是什么?

具体说明:

>为什么不能foreach被设计为直接迭代通过IEnumerator< T>,像这样:

// foreach (var e in anEnumerator) { //... }
while (anEnumerator.MoveNext())
{
    doSomething(anEnumerator.Current);
}

>为什么Linq不能直接从IEnumerator< T>

两个接口各自表示非常不同的概念。 IEnumerable的< T>是“允许枚举”的东西,其中IEnumerator< T>是枚举本身的代表。

如果要将它们合并在一起,则不可能同时枚举单个集合多次(没有其他机制)。例如,在数组中执行foreach的两个线程将不再工作,这在当前的设计中是完全可以接受的。

http://stackoverflow.com/questions/25984091/why-is-ienumerablet-necessary-when-there-is-ienumeratort

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:c# – 为什么有IEnumerator需要IEnumerable?