2012-08-03 122 views
1

yield return概念的正式名稱究竟是什麼?「收益回報」概念的名稱是什麼? IEnumerable,迭代器,發生器?

public IEnumerable<T> Bar() { 
    ... 
    yield return foo; 
    ... 
} 

我聽說(讀),它被稱爲:

  • 迭代
  • IEnumerabe
  • 發電機
  • <您選擇>

」不是個迭代器只是一些「事物」帽子迭代什麼? A List<T>IEnumerable<T>,所以似乎也不合理。

很多關於SO的回答,談論yield return使用這兩個術語之一。

「發電機」呢?或者這隻適用於當你「憑空創造價值」時,例如斐波納契數字,你不需要數據收集作爲源?

+0

對我來說,它是一個發電機。 – leppie 2012-08-03 16:24:26

+0

同樣,發電機。請參閱http://en.wikipedia.org/wiki/Generator_%28computer_programming%29#C.23 – wsanville 2012-08-03 16:24:48

+0

發生器當然,儘管這是一個Python術語。 – Blindy 2012-08-03 16:25:17

回答

5

作爲非語言特定方式的一般概念,「發生器」可能是最常見的術語。如果我正在與不熟悉C#的人交談,那就是我所使用的。

的方法本身是一個迭代在C#說明書的術語。該實現是迭代器塊

從C#4規範的部分10.14:

甲功能構件(第7.5節),使用迭代器塊實現(第8.2節)稱爲迭代

這是我在專門討論C#時使用的術語。

+0

我確實想知道,他們爲什麼要用已經[建立的名稱](http://en.wikipedia.org/wiki/Iterator)爲了不同的東西? (我可以看到'yield'極大地簡化了迭代器的編寫) – phant0m 2012-08-16 20:56:13

1

這就是所謂的迭代器,看看這個MSDN

迭代器是一個方法,get訪問,或者運營商通過使用產量 關鍵字

執行一個數組或集合類 定製迭代
+0

這聽起來像是營銷巨無霸巨頭; p – leppie 2012-08-03 16:27:34

+0

呃,我沒有寫它。 – Nathan 2012-08-03 16:28:34

+0

從技術上講,我想這聽起來很有趣; p – leppie 2012-08-03 16:29:21

3

它雖然是有用的校長是「協同程序」。見Wikipedia

協程是概括子程序 以允許多個入口點用於懸掛和在某些位置恢復執行 計算機程序組件。協程非常適合實現更多熟悉的程序組件,例如協作任務,迭代器,無限列表和管道。