5

我不太明白 C# Collections 中 IEnumerator 的用途是什么。它的用途是什么,为什么要使用它?

我尝试在线查看http://msdn.microsoft.com/en-us/library/system.collections.ienumerator.aspx 但那篇文章没有多大意义。我问的原因是在 Unity3d 游戏引擎中,它与 yield 函数一起使用。我试图弄清使用 IEnumerator 的原因。

4

3 回答 3

10

IEnumerator 接口在由类实现时允许使用内置的 foreach 语法对其进行迭代。

在需要为 IEnumerator 接口迭代的类中,为控制对象循环的 GetEnumerator 函数定义了一个方法签名。

public IEnumerator<OrderLine> GetEnumerator()
    {
        for (int i=0;i<maxItems;i++) 
        {
            yield return item[i];
        }
    }

正如您在此示例中所看到的,yield语句允许您将控制权返回给调用者,而不会丢失其在枚举中的位置。当调用者点击 foreach 循环的下一个增量时,控制将被传递回 yield 语句之后的行。

于 2010-10-28T19:13:55.987 回答
1

您很少显式使用 IEnumerator,但有很多扩展方法可以使用它,以及foreach. 所有的集合都实现了它,它是迭代器模式的一个例子。

于 2010-10-28T19:16:26.923 回答
1

它只是一个允许对象执行操作以轻松迭代集合的接口。您可以使用它来创建对象,这些对象使用 foreach 构造或类似语法迭代自定义集合。

于 2010-10-28T19:16:51.327 回答