本帖最后由 曾玉锋 于 2013-3-13 12:44 编辑
1.首先强调掉的是foreach只能对实现了IEnumerator接口或者间接实现IEnumerator接口的类型进行遍历。
2.foreach遍历集合的过程:
下面是IEnumerator接口,
public interface IEnumerator
{
object Current
{
get;
}
bool MoveNext();
void Reset();
}
foreach遍历集合的过程如下:
1.将集合或者数组的数据copy一份到内存,并且获得一个IEnumerator对象,获得当前在新的集合或者新数组中的第一个对象赋值给Current,
大家可以看到Current属性是只读的,所以只能读不能修改,况且也不是对原集合或数组中操作。
2.通过调用IEnumerator对象的MoveNext()方法判断是否还有对象可读,且顺序向下依次读取,所以是没法倒着读,也不能用下标去改变读取的顺序。
|