2010-03-25 20 views
7

那裏有一個很好的資源來解釋枚舉器和自定義枚舉器的概念嗎?特別是有一個很好的例子說明你爲什麼要自己實現IEnumerable以及如何有效地使用它?我在哪裏可以學習C#中的統計員的來龍去脈?

我偶爾會遇到yield,我試圖更好地理解它。

+0

@slc等待喬恩斯基特的答案.... – 2010-03-25 11:32:23

+0

@Pandiya Chendur::| – leppie 2010-03-25 11:34:33

+0

@leppie是什麼意思? – 2010-03-25 11:38:42

回答

8

最簡單的例子:

IEnumerable<string> GetNames() 
{ 
    yield return "Bob"; 
    yield return "Bob's uncle"; 
    yield return "Alice"; 
    yield return "Stacy"; 
    yield return "Stacy's mom"; 
} 

用法:

foreach (var name in GetNames()) 
{ 
    Console.WriteLine(name); 
} 

要看到它的行動,將一個調試器斷點在GetNames方法每一行。

+0

這很有道理,但你能解釋Count()方法是如何工作的嗎?它是否強制枚舉器遍歷所有結果來計算它們?另外,爲什麼一些代碼有「收益率突破」? – NibblyPig 2010-03-25 12:17:35

+0

'yield break'基本上是說'停止,沒有更多的元素'。是的,如果沒有快捷方式(例如'Count'和'Length'),'Count()'(不是'Count'或'Length')將迭代整個集合。 – leppie 2010-03-25 12:22:27

+0

謝謝你!它現在開始有意義了,但是快捷方式是什麼意思? – NibblyPig 2010-03-25 12:29:15

0

一個很好的示例可以在IEnumerable的MSDN頁面找到。

+1

你可能想給英文鏈接:) – leppie 2010-03-25 11:33:26

+0

我以爲我把我的文化轉換成了我們...... Thx! – Andrey 2010-03-25 11:36:09

+0

不幸的是,樣本不包括產量,這可能是混淆的真正來源。 – 2010-03-25 11:38:55

1

我發現的最好的例子和參考實際上是來自全能喬恩Skeet的C#深度書。這不是太昂貴,它是值得你學習有關C#的一切。

+0

請注意,這是第1版中的第6章,曾經是(並且可能仍然是)免費示例章節之一。 – 2010-03-25 11:58:12

+0

有一個鏈接:http://www.manning-source.com/books/skeet/Chapter6sample.pdf – 2010-03-25 11:59:51

+0

@Martinho:不幸的是,直接鏈接不起作用。你首先需要通過http://manning.com/skeet--我懷疑它正在檢查引用者。但是,它仍然是免費的:) – 2010-03-25 13:53:23

3

我在學習IEnumerable和IEnumerator時發現的另一本書是Troelsen的Pro C#2008書。它解釋了接口包含的內容以及如何使用「yield」關鍵字構建迭代器。

希望得到這個幫助。

相關問題