C#中IEnumerable和IEnumerator区别

IEnumerator:是一个真正的集合访问器,提供在普通集合中遍历的接口,有Current,MoveNext(),Reset(),其中Current返回的是object类型。
IEnumerable: 暴露一个IEnumerator(只包含一个抽象的方法GetEnumerator(),该方法返回一个可用于循环访问集合的IEnumerator对象),支持在普通集合中的遍历。
IEnumerator<T>:继承自IEnumerator,有Current属性,返回的是T类型。
IEnumerable<T>:继承自IEnumerable,暴露一个IEnumerator<T>,支持在泛型集合中遍历。

//这个接口告知调方对象的子项可以枚举

public interface IEnumerable

{    

  IEnumerator GetEnumerator();

}

可以看到,GetEnumerator方法返回对另一个接口System.Collections.IEnumerator的引用。这个接口提供了基础设施,调用方可以用来移动IEnumerable兼容容器包含的内部对象。

//这个接口允许调用方获取一个容器的子项

public interface IEnumerator

{    

  bool MoveNext();   //将游标的内部位置向前移动    

  object Current{get;}  //获取当前的项(只读属性)    

  void Reset();  //将游标重置到第一个成员前面

}

原文地址:https://www.cnblogs.com/anny-1980/p/4546193.html