如果一个对象想使用foreach迭代,就必须实现IEnumerable接口和GetEnumerator方法;
IEnumerator接口的方法于属性:
MoveNext方法 --- 移动到集合的下一个元素上,如果有这个元素,如果有这个元素,该方法就返回true,如果集合不在有更多的元素,该方法就返回false;
Current属性 --- 返回光标所在的元素;
Reset方法 --- 方法将光标重新定位于集合的开头。
C#的foreach语句不会解析为IL代码中的foreach语句。C#编译器会把foreach语句转换为IEnumerable接口的方法和属性。
下面用一个简单的例子来说明下:
foreach 语句会解析为下面的代码段。首先,调用GetEnumerator()方法,获取数组的一个枚举。在while循环中只要MoveNext()返回true,用Current属性访问数组中的元素;