C 中yield return用法分析

2022-01-16 01:32:50 字數 1854 閱讀 6613

這篇文章主要介紹了c#中yield return用法,對比使用yield return與不使用yield return的流程,更直觀的分析了yield return的用法,需要的朋友可以參考下

yield關鍵字用於遍歷迴圈中,yield return用於返回ienumerable,yield break用於終止迴圈遍歷。

有這樣的乙個int型別的集合:

staticlist<int> getinitialdata()

;

}

需要列印出所有值大於2的元素。

不使用yield return的實現

staticienumerable<int> filterwithoutyield()

}

returnresult;

}

客戶端呼叫:

staticvoidmain(stringargs)

console.readkey();

}

輸出結果:3,4

使用yeild return實現

staticienumerable<int> filterwithyield()

}

yieldbreak;

console.writeline("這裡的**不執行");

}

客戶端呼叫:

staticvoidmain(stringargs)

console.readkey();

}

輸出結果:3,4

總結:

通過單步除錯發現:

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

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

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

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

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

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

**於:

C 中yield return用法分析

這篇文章主要介紹了c 中yield return用法,對比使用yield return與不使用yield return的流程,更直觀的分析了yield return的用法,需要的朋友可以參考下 yield關鍵字用於遍歷迴圈中,yield return用於返回ienumerable,yield bre...

C 中yield return用法分析

yield關鍵字用於遍歷迴圈中,yield return用於返回ienumerable,yield break用於終止迴圈遍歷。有這樣的乙個int型別的集合 static listgetinitialdata 需要列印出所有值大於2的元素。不使用yield return的實現 static ienu...

C 中yield return用法分析

這篇文章主要介紹了c 中yield return用法,對比使用yield return與不使用yield return的流程,更直觀的分析了yield return的用法,需要的朋友可以參考下 yield關鍵字用於遍歷迴圈中,yield return用於返回ienumerable,yield bre...