我们在数组的遍历中通常用到for循环.
例子:
// for语句的遍历输出使用
1 string [] names={"熊猫","狐狸","美人鱼"}; 2 3 for(int i=0;i<names.Length;i++) 4 { 5 string s1=names[i]; 6 Console.WritleLine(str); 7 } 8 9 Console.ReadKey();
在C#里面还有另外一种遍历循环输出方法:foreach
foreach根据名字就知道是C#的语法糖.
上面的数据用foreach输出
1 // for语句的遍历输出使用 2 string [] names={"熊猫","狐狸","美人鱼"}; 3 4 foreach(string s1 in names) 5 { 6 Console.WriteLine(s1); 7 } 8 9 Console.ReadKey();
亲,用的是不是很舒服呢?foreach减少了代码,并增加了程序的可读性。
再来专门研究下foreach的作用于实现
foreach,in(C# 参考)
foreach 语句为数组或对象集合中的每个元素重复一个嵌入语句组。foreach 语句用于循环访问集合以获取所需信息,但不应用于更改集合内容以避免产生不可预知的副作用。
原理:
经反编译过后得出:
在foreach循环中,迭代集合collectionObject的过程如下:
(1)调用collectionObject.GetEnumerator(),返回一个IEnumerator引用。这个方法可以通过IEnumerable接口的实现代码来获得。但这是可选的。
(2)调用返回的IEnumerator接口的MoveNext()方法。
(3)如果MoveNext()方法返回true,就使用IEnumerator接口的Current属性获取对象的一个引用,用于foreach循环。
(4)重复前面两步,直到MoveNext()方法返回false为止,此时循环停止。
这么好的东西不知道C++有没有,查了下发现C++没有这个关键字.但是我觉得根据原理C++也可以实现这个.
C++可以通过宏来处理
foreach 宏的参数依次为:元素类型,元素名,容器类型,容器名。
假设有个vector如下面的定义:
names<int > v;
那么遍历v可以使用下面的代码:
foreach(int , e, names<int >, v)
{// 使用(e)来访问v的元素
}
End!
欢迎大家一起交流 ,分享程序员励志故事。 幸福的程序员 QQ群: