foreach原理

来源:互联网 发布:机加工编程软件有哪些 编辑:程序博客网 时间:2024/05/29 04:53

结构篇:
foreach 语句为数组或对象集合中的每个元素重复一个嵌入语句组。foreach 语句用于循环访问集合以获取所需信息,但不应用于更改集合内容以避免产生不可预知的副作用。此语句的形式如下:

foreach (type identifier in expression) statement
其中:

type
identifier 的类型。
identifier
表示集合元素的迭代变量。如果迭代变量为值类型,则无法修改的只读变量也是有效的。
expression
对象集合或数组表达式。集合元素的类型必须可以转换为 identifier 类型。请不要使用计算为 null 的表达式。
而应计算为实现 IEnumerable 的类型或声明 GetEnumerator 方法的类型。在后一种情况中,GetEnumerator 应该要么返回实现 IEnumerator 的类型,要么声明 IEnumerator 中定义的所有方法。

statement
要执行的嵌入语句。

原理篇:
在foreach循环中,迭代集合collectionObject的过程如下:
(1)调用collectionObject.GetEnumerator(),返回一个IEnumerator引用。这个方法可以通过IEnumerable接口的实现代码来获得。但这是可选的。
(2)调用返回的IEnumerator接口的MoveNext()方法。
(3)如果MoveNext()方法返回true,就使用IEnumerator接口的Current属性获取对象的一个引用,用于foreach循环。
(4)重复前面两步,直到MoveNext()方法返回false为止,此时循环停止。

替代foreach实现:
foreach (XXX a in b){

}

等同于

XXX a;
IEnumerator ie = (IEnumable)b.GetEnumerator();
while (ie.MoveNext) {
a = (XXX)ie.Current;

}

1 0