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 循环还可以通过 gotoreturn 或 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 }

输出

0
1
2
3
5
8
13

 

 

原理:

     经反编译过后得出:

 

  在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的区别

 

C#基础之------for与foreach的区别

上一篇:工作笔记:复制文件--从windows到ubuntu,再到fedora


下一篇:C# GDI绘制验证码