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   wangyblzu  阅读(3093)  评论(0编辑  收藏  举报

导航

< 2025年2月 >
26 27 28 29 30 31 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 1
2 3 4 5 6 7 8
点击右上角即可分享
微信分享提示