• c# for 和 foreach 的区别


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

  • 相关阅读:
    删除旧版vue-cli
    vue.extend和vue.component的区别
    vue-loader处理vue文件
    CentOS7安装iptables防火墙
    java类的初始化顺序
    java的接口和抽象类的理解
    js中的in操作符
    js中call和apply函数
    js的类型转换
    闭包作用
  • 原文地址:https://www.cnblogs.com/HKKD/p/7411548.html
Copyright © 2020-2023  润新知