前一篇ienumerable和ienumerator的理解[原]介紹了這兩個介面用來實現foreach
其實還可以用yield return
直接上**和結果
一下為摘錄的一部分,yield return對比前一篇
1。**很簡潔。其實這裡多了乙個yield return 語句,由於yield return 並不對應多餘的il指令。所以編譯器就會在編譯的時候,生成乙個實現ienumator介面的類.並且自動維護該類的狀態.比如movenext,
2. 使用yield return 很容易實現遞迴呼叫中的迭代器. 如果以上的問題,不使用yield return的話,可想而知.要麼你先把所有的結果暫時放到乙個物件集合中. 可是這樣就以為著在迭代之前一定要計算號. 要麼可能你的movenext 就相當的複雜了. .net 編譯生成的**其實利用了state machine. **量也很大.
類似迭代的呼叫,比如二叉樹遍歷 用yield return 就很方便了.另外還有常說的pipeline模式也很方便了.
可是yield return 還是有一些缺陷.
比如如果getfiles 有乙個引數是ref 或者 out, 那這個state machine就很難去維護狀態了. 事實上,yield return那是不支援方法帶有ref或者out引數的情況.
非同步雜記yield return
同步的阻塞 js非同步 這個js也好!async和await的本質其實是 yield return 和 linq 的 迭代式 等待 yield return關鍵字的作用就是退出當前函式,並且會儲存當前函式執行到什麼地方,也就上下文。下次執行這個函式上次跑來的 是不會重複執行的 yield 讓出,出產...
C 中yield return用法分析
這篇文章主要介紹了c 中yield return用法,對比使用yield return與不使用yield return的流程,更直觀的分析了yield return的用法,需要的朋友可以參考下 yield關鍵字用於遍歷迴圈中,yield return用於返回ienumerable,yield bre...
C 中yield return用法分析
這篇文章主要介紹了c 中yield return用法,對比使用yield return與不使用yield return的流程,更直觀的分析了yield return的用法,需要的朋友可以參考下 yield關鍵字用於遍歷迴圈中,yield return用於返回ienumerable,yield bre...