foreach是否将IEnumerator/IEnumerable用于内置类型?

Pre*_*rem 3 .net c# foreach interface enumerators

foreach循环是否使用接口IEnumerator,IEnumerable仅用于迭代自定义类型(类)的对象,还是用于迭代内置类型(在幕后)?

Dav*_*ale 7

Foreach不依赖于此IEnumerable.但是,如果一个类型实现它,那么foreach循环将能够枚举它(基于模式的匹配).

在幕后它只需要一个GetEnumerator()方法,而枚举器必须包含CurrentMoveNext().

来自MSDN:

  • 集合类型:

    • 必须是以下类型之一:interface,classstruct.
    • 必须包含一个名为GetEnumerator的实例方法,该方法返回一个类型,例如,Enumerator(如下所述).
  • 类型Enumerator(类或结构)必须包含:

    • 返回的名为Current的属性ItemType或可以转换为它的类型.属性访问器返回集合的当前元素.
    • 一个名为MoveNext的bool方法,它递增项目计数器,如果集合中有更多项目,则返回true.

MSDN - 使用foreach与集合

更新:请参阅更新的MSDN页面 - 如何:使用foreach访问集合类(C#编程指南).