码迷,mamicode.com
首页 > Windows程序 > 详细

c# for 和 foreach 的区别

时间:2017-08-22 15:54:47      阅读:190      评论:0      收藏:0      [点我收藏+]

标签:list   比较   ext   res   next   类型   bar   分享   返回   

foreach

能够进行foreach的类型结构,都必须实现IEnumerable接口。

IEnumerable接口,有一个GetEnumerator的方法,返回一个实现IEnumerator接口的对象。
IEnumerator接口,有Current只读属性,MoveNext方法,Reset方法。

第一次 var a in GetList() 时 调用 GetEnumerator 返回第一个对象 并 赋给a,

以后每次再执行 var a in GetList() 的时候 调用 MoveNext.直到循环结束.

期间GetList()方法只执行一次.

比如类型结构 TestForeach 一个对象tf ,在进行foreach的时候,比如如下:

1 foreach(var a in tf)
2 {
3   console.writeLine(a.toString());
4 }

程序运行到var a in tf时,实际上,调用了TestForeach的GetEnumerator()方法,返回一个a,当运行完console.writeLine(a.toString());后,继续运行 var a in tf,其实是调用了 上一次的a.MoveNext()放法,直到a.MoveNext=false foreach运行完毕。

 

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

技术分享
for(int i = 0; i < GetCount(); i++)
{
  ....
}

=

int i = 0;

while(i < GetCount())
{
  ...
}
技术分享

for 循环每次循环会调用 GetCount() 来比较长度. 而 foreach 不考虑长度,只调用一次GetList().

 

结论.

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

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

 

并且foreach的时候会锁定集合中的对象.期间不能修改.

c# for 和 foreach 的区别

标签:list   比较   ext   res   next   类型   bar   分享   返回   

原文地址:http://www.cnblogs.com/HKKD/p/7411548.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!