可能重复:
  任何人都可以向我解释IEnumerable和IEnumerator吗?

IEnumerator与IEnumerable有什么区别?

有帮助吗?

解决方案

IEnumerable 是定义一种方法的界面 GetEnumerator ,返回 IEnumerator 界面,这反过来允许只读访问集合。实现IEnumerable的集合可以与foreach语句一起使用。

定义

IEnumerable 

public IEnumerator GetEnumerator();

IEnumerator

public object Current;
public void Reset();
public bool MoveNext();

codebetter.com的示例代码

其他提示

IEnumerator是一个可以枚举的东西:它具有Current属性以及MoveNextReset方法(在.NET代码中,您可能不会显式调用,尽管可以)。

IEnumerable是一个可以枚举的东西......这只是意味着它有一个返回IEnumerator<T>的GetEnumerator方法。

你用哪个?使用Enumerator<T>的唯一原因是,如果你有一些非标准的枚举方法(即,逐个返回其各种元素),你需要定义它是如何工作的。您将创建一个实现List<T>的新类。但是你仍然需要在Queue<T>,类中返回Stack<T>

要查看枚举器(实现<=>)的外观,请参阅任何<=>类,例如<=>,<=>或<=>中包含的类。有关实现<=>的类的信息,请参阅任何标准集合类。

Enumerator显示列表或集合中的项目。 枚举器的每个实例都在某个位置(第一个元素,第七个元素等)并且可以为您提供该元素(IEnumerator.Current)或移动到下一个元素(IEnumerator.MoveNext)。在C#中编写foreach循环时,编译器会生成使用枚举器的代码。

Enumerable是一个可以给你GetEnumerator的课程。它有一个名为<=>的方法,它为您提供了一个查看其项目的<=>。当您在C#中编写<=>循环时,它生成的代码调用<=>来创建循环使用的<=>。

IEnumerable和IEnumerator都是接口。 IEnumerable只有一个名为GetEnumerator的方法。此方法返回(因为所有方法返回包括void的内容)另一种类型是接口,该接口是IEnumerator。在任何集合类中实现枚举器逻辑时,实现IEnumerable(通用或非通用)。 IEnumerable只有一个方法,而IEnumerator有2个方法(MoveNext和Reset)和一个属性Current。为了便于理解,请考虑将IEnumebale包含在其中的IEnumerator(虽然不是通过继承或包含)。请参阅代码以便更好地理解:

    class Test : IEnumerable, IEnumerator
    {
         IEnumerator IEnumerable.GetEnumerator()
        {
            throw new NotImplementedException();
        }

        public object Current
        {
            get { throw new NotImplementedException(); }
        }

        public bool MoveNext()
        {
            throw new NotImplementedException();
        }
        public void Reset()
        {
            throw new NotImplementedException();
        }
    }
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top