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

  • 相关阅读:
    10. 王道考研-树与二叉树
    Shell基础论证实例
    关系型数据库与非关系型数据库区别
    中高级测试工程师面试题
    idea中cucumber环境搭建
    Java开发中对Redis的基本操作总结
    TestNG 单元测试框架(针对于testNG.xml配置)
    jmeter(四十五)常用Beanshell脚本
    Jmeter(二十一)_脚本两种参数化
    Jmeter(十五)_上传与下载
  • 原文地址:https://www.cnblogs.com/HKKD/p/7411548.html
Copyright © 2011-2022 走看看