首页 > 代码库 > C#基础之------for与foreach的区别
C#基础之------for与foreach的区别
我们在数组的遍历中通常用到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 块之后的下一个语句。
可以在 foreach 块的任何点使用 break 关键字跳出循环,或使用 continue 关键字直接进入循环的下一轮迭代。
foreach 循环还可以通过 goto、return 或 throw 语句退出。
有关 foreach 关键字的更多信息(包括代码示例),请参见下面的主题:
对数组使用 foreach(C# 编程指南)
如何:使用 foreach 访问集合类(C# 编程指南)
在此示例中,使用 foreach 显示整数数组的内容。
1 // cs_foreach.cs 2 class ForEachTest 3 { 4 static void Main(string[] args) 5 { 6 int[] fibarray = new int[] { 0, 1, 2, 3, 5, 8, 13 }; 7 foreach (int i in fibarray) 8 { 9 System.Console.WriteLine(i);10 }11 }12 }
输出
01235813
原理:
经反编译过后得出:
在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群:
C#基础之------for与foreach的区别