国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

foreach的一點理解

2019-11-17 02:22:18
字體:
來源:轉載
供稿:網友

foreach的一點理解

首先什么樣的數據才能實現foreach

1 實現IEnumerable這個接口

2 有GetEnumerable()這個方法

然后為啥實現這個接口或者有這個方法就可以實現foreach遍歷

首先我先用反編譯器看看里面到底是怎么實現的

然后我看了下 MoveNext的源碼

public bool MoveNext(){    if (this.version != this.list._version)    {        throw new InvalidOperationException(Environment.GetResourceString("InvalidOperation_EnumFailedVersion"));    }    if (this.index < this.endIndex)    {        this.currentElement = this.list[++this.index];        return true;    }    this.index = this.endIndex + 1;    return false;}

  和Current的源碼

public object Current{    get    {        if (this.index < this.startIndex)        {            throw new InvalidOperationException(Environment.GetResourceString("InvalidOperation_EnumNotStarted"));        }        if (this.index > this.endIndex)        {            throw new InvalidOperationException(Environment.GetResourceString("InvalidOperation_EnumEnded"));        }        return this.currentElement;    }}

  MoveNext里面基本就是索引+1 然后用索引(index)來確定currentElement

而Current里就是返回currentElement

這么說來 就是MoveNext來推動索引 從而遍歷

foreach(var item in list)

現在我們再來講講foreach的全過程

首先復制需要索引的集合(list) 然后指針指向集合中第一位的前一個地址

然后開始執行 in 就是MoveNext執行的時候 推動指針 然后通過Current獲得值 賦值給item

然后一直執行in 到item的操作 直到遍歷完成


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 游戏| 肥东县| 兴文县| 垣曲县| 万安县| 岳阳市| 海晏县| 深圳市| 阿巴嘎旗| 永善县| 隆安县| 阜康市| 嘉善县| 广丰县| 内黄县| 临桂县| 湖口县| 原阳县| 彭水| 丹棱县| 伊川县| 东阿县| 图片| 兴宁市| 建水县| 高雄市| 平邑县| 桃园县| 宝坻区| 光山县| 新干县| 泰兴市| 遂溪县| 瓮安县| 东丽区| 松潘县| 宝清县| 勐海县| 乌拉特前旗| 菏泽市| 钟祥市|