Pre*_*rem 3 .net c# foreach interface enumerators
foreach循环是否使用接口IEnumerator,IEnumerable仅用于迭代自定义类型(类)的对象,还是用于迭代内置类型(在幕后)?
Foreach不依赖于此IEnumerable.但是,如果一个类型实现它,那么foreach循环将能够枚举它(基于模式的匹配).
在幕后它只需要一个GetEnumerator()方法,而枚举器必须包含Current和MoveNext().
来自MSDN:
集合类型:
- 必须是以下类型之一:interface,class或struct.
- 必须包含一个名为GetEnumerator的实例方法,该方法返回一个类型,例如,
Enumerator(如下所述).类型
Enumerator(类或结构)必须包含:
- 返回的名为Current的属性
ItemType或可以转换为它的类型.属性访问器返回集合的当前元素.- 一个名为MoveNext的bool方法,它递增项目计数器,如果集合中有更多项目,则返回true.
更新:请参阅更新的MSDN页面 - 如何:使用foreach访问集合类(C#编程指南).