zoukankan      html  css  js  c++  java
  • 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的时候会锁定集合中的对象.期间不能修改.

  • 相关阅读:
    JDBC的初步了解及使用
    HTML+CSS的小实例
    java接口与抽象类
    java类的继承(基础)
    java中求质数(素数)的问题
    对HTML5标签的认识(四)
    对HTML5标签的认识(三)
    对HTML5标签的认识(三)
    SublimeText2 快捷键一览表
    Node开发项目管理工具 Grunt 对比 Gulp
  • 原文地址:https://www.cnblogs.com/HKKD/p/7411548.html
Copyright © 2011-2022 走看看