C yield return 用法與解析

2021-09-07 05:06:18 字數 1207 閱讀 4697

原文:

c# yield return 用法與解析

c# yield return 用法與解析

本文參考自:

當初沒有認真理解 yield 這個關鍵字,現在又遇到了依舊不理解,為了以後不再為了 yield 困惑,決定好好研究一下 yield 的用法與意義:

yield 從字面上理解有「退位,屈服」的意思,轉一下彎就理解成「許可權轉移」,也就是將控制權交給別人,在這裡就是把集合裡滿足條件(如果沒有過濾條件,就是全體)的個體的操作轉移給另乙個物件。

class

program

console.readkey();

}//申明屬性,定義資料**

public

static listdata;}

}//申明屬性,過濾器(不適用yield)

public

static ienumerablefilterwithoutyield

return

result;}}

}

可以看到如果不用yield,要返回大於4的所有的樹,就要到另乙個集合。而用yield的情況下就不必如此麻煩了:

//

申明屬性,過濾器(使用yield)

public

static ienumerablefilterwithoutyield}}

為什麼會這樣呢?

通過單步除錯發現:

雖然2種方法的輸出結果是一樣的,但運作過程迥然不同。第一種方法,是把結果集全部載入到記憶體中再遍歷;第二種方法,客戶端每呼叫一次,yield return就返回乙個值給客戶端,是"按需供給"。

第一種方法,客戶端呼叫過程大致為:

使用yield return,客戶端呼叫過程大致為:

使用yield return為什麼能保證每次迴圈遍歷的時候從前一次停止的地方開始執行呢?

--因為,編譯器會生成乙個狀態機來維護迭代器的狀態。

簡單地說,當希望獲取乙個ienumerable型別的集合,而不想把資料一次性載入到記憶體,就可以考慮使用yield return實現"按需供給"。

C yield return 用法與解析

原文 c yield return 用法與解析 c yield return 用法與解析 本文參考自 當初沒有認真理解 yield 這個關鍵字,現在又遇到了依舊不理解,為了以後不再為了 yield 困惑,決定好好研究一下 yield 的用法與意義 yield 從字面上理解有 退位,屈服 的意思,轉一...

C yield return 用法與解析

當初沒有認真理解 yield 這個關鍵字,現在又遇到了依舊不理解,為了以後不再為了 yield 困惑,決定好好研究一下 yield 的用法與意義 yield 從字面上理解有 退位,屈服 的意思,轉一下彎就理解成 許可權轉移 也就是將控制權交給別人,在這裡就是把集合裡滿足條件 如果沒有過濾條件,就是全...

C yield return 用法與解析

當初沒有認真理解 yield 這個關鍵字,現在又遇到了依舊不理解,為了以後不再為了 yield 困惑,決定好好研究一下 yield 的用法與意義 yield 從字面上理解有 退位,屈服 的意思,轉一下彎就理解成 許可權轉移 也就是將控制權交給別人,在這裡就是把集合裡滿足條件 如果沒有過濾條件,就是全...