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

  • 相关阅读:
    JavaScript核心参考
    面向对象的程序设计之工厂模式
    ES6中promise的使用方法
    详解 Vue 2.4.0 带来的 4 个重大变化
    Vue.js 1.x 和 2.x 实例的生命周期
    表单控件的全面分析
    元素的一些常用属性
    为表格增加的方法
    Element类型知识大全
    6-3.斜体标签
  • 原文地址:https://www.cnblogs.com/HKKD/p/7411548.html
Copyright © 2020-2023  润新知