foreach和for循环的区别

1、foreach

foreach依赖IEnumerable接口。

第一次var a in GetList()时调用GetEnumerator()返回第一个对象并赋给a,以后每次再执行 var a in GetList() 的时候仅调用MoveNext,直到循环结束。在循环期间GetList()方法只执行一次。

 1 foreach   (var a in GetList())
 2 {
 3     ...
 4 }
 5 
 6 //与下面具有相同功能
 7 
 8 var a;
 9 IEnumerator  e  =  GetList().GetEnumerator();
10 while (e.MoveNext)
11 {
12     a = e.Current;
13 }

 

2、for

for循环靠下标定位,list[3] 相当于 *(list + 3)。

 1 for(int i = 0; i < GetCount(); i++)
 2 {
 3   ....
 4 }
 5 
 6 //与下面具有相同功能
 7 
 8 int i = 0;
 9 
10 while(i < GetCount())
11 {
12   ...
13 }

 

3、

for循环每次循环会调用GetCount()来比较长度,而foreach不考虑长度,只调用一次GetList()。并且foreach的时候会锁定集合中的对象,期间不能修改。

 

4、小结

在固定长度或长度不需要计算的时候for循环效率高于foreach。

在不确定长度,或计算长度有性能损耗的时候,用foreach比较方便。

 

posted on 2016-08-05 09:30  wangyblzu  阅读(3086)  评论(0编辑  收藏  举报

导航