深入 foreach 和 for 循环的区别

对着背影说爱祢 提交于 2019-12-17 04:47:56

foreach 依赖 IEnumerable.

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

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

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

foreach   (var a in GetList()){    ...}=var a;IEnumerator  e  =  GetList().GetEnumerator();while (e.MoveNext){    a = e.Current;}


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的时候会锁定集合中的对象.期间不能修改.

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!