當初沒有認真理解 yield 這個關鍵字,現在又遇到了依舊不理解,為了以後不再為了 yield 困惑,決定好好研究一下 yield 的用法與意義:yield 從字面上理解有「退位,屈服」的意思,轉一下彎就理解成「許可權轉移」,也就是將控制權交給別人,在這裡就是把集合裡滿足條件(如果沒有過濾條件,就是全體)的個體的操作轉移給另乙個物件。
class
program
console.
readkey()
;}//申明屬性,定義資料**
public
static list<
int> data
;}}//申明屬性,過濾器(不適用yield)
public
static ienumerable<
int> filterwithoutyield
return result;}}
}
可以看到如果不用yield,要返回大於4的所有的樹,就要到另乙個集合。而用yield的情況下就不必如此麻煩了:
//申明屬性,過濾器(使用yield)
public
static ienumerable<
int> filterwithoutyield
}}
為什麼會這樣呢?
通過單步除錯發現:
雖然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 用法與解析
原文 c yield return 用法與解析 c yield return 用法與解析 本文參考自 當初沒有認真理解 yield 這個關鍵字,現在又遇到了依舊不理解,為了以後不再為了 yield 困惑,決定好好研究一下 yield 的用法與意義 yield 從字面上理解有 退位,屈服 的意思,轉一...
C yield return 用法與解析
當初沒有認真理解 yield 這個關鍵字,現在又遇到了依舊不理解,為了以後不再為了 yield 困惑,決定好好研究一下 yield 的用法與意義 yield 從字面上理解有 退位,屈服 的意思,轉一下彎就理解成 許可權轉移 也就是將控制權交給別人,在這裡就是把集合裡滿足條件 如果沒有過濾條件,就是全...