IEnumerable背后的理由是什么?

Aut*_*act 1 .net c#

为什么你认为微软希望我们通过IEnumerable来获取IEnumerator?IEnumerator是否存在对某个给定类型的有效强制转换,以确定该类型是否可枚举?

例如,以下是错误的?

class MyClass : IEnumerator
{
    ...
}

MyClass myObj = new MyClass();

if(myObj as IEnumerator != null)
{
    Console.WriteLine("myObj is enumerable");
}
else
{
    Console.WriteLine("myObj doesn't support enumeration");
}
Run Code Online (Sandbox Code Playgroud)

Joe*_*Joe 10

您可能有两个枚举的线程 - 每个线程都需要自己的枚举器.

IEnumerable.GetEnumerator返回一个枚举器,该枚举器最初位于集合的第一个元素之前.如果你只有IEnumerator,你必须记住在使用之前重置自己,即使在单线程场景中也是如此.


dev*_*vio 5

IEnumerator保存执行枚举所必需的状态信息,例如数组索引等.

枚举状态信息不是可枚举对象的一部分,因此强制转换不够强大.

此外,枚举器/可枚举分离允许在同一可枚举集合上同时执行多个枚举.