程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> foreach的一點理解,foreach理解

foreach的一點理解,foreach理解

編輯:C#入門知識

foreach的一點理解,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的操作 直到遍歷完成

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved