那裏有一個很好的資源來解釋枚舉器和自定義枚舉器的概念嗎?特別是有一個很好的例子說明你爲什麼要自己實現IEnumerable
以及如何有效地使用它?我在哪裏可以學習C#中的統計員的來龍去脈?
我偶爾會遇到yield
,我試圖更好地理解它。
那裏有一個很好的資源來解釋枚舉器和自定義枚舉器的概念嗎?特別是有一個很好的例子說明你爲什麼要自己實現IEnumerable
以及如何有效地使用它?我在哪裏可以學習C#中的統計員的來龍去脈?
我偶爾會遇到yield
,我試圖更好地理解它。
最簡單的例子:
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
方法每一行。
一個很好的示例可以在IEnumerable的MSDN頁面找到。
我發現的最好的例子和參考實際上是來自全能喬恩Skeet的C#深度書。這不是太昂貴,它是值得你學習有關C#的一切。
請注意,這是第1版中的第6章,曾經是(並且可能仍然是)免費示例章節之一。 – 2010-03-25 11:58:12
有一個鏈接:http://www.manning-source.com/books/skeet/Chapter6sample.pdf – 2010-03-25 11:59:51
@Martinho:不幸的是,直接鏈接不起作用。你首先需要通過http://manning.com/skeet--我懷疑它正在檢查引用者。但是,它仍然是免費的:) – 2010-03-25 13:53:23
我在學習IEnumerable和IEnumerator時發現的另一本書是Troelsen的Pro C#2008書。它解釋了接口包含的內容以及如何使用「yield」關鍵字構建迭代器。
希望得到這個幫助。
下面是一些關於基礎知識的更多資源。
韋斯對迭代器的性能有很大的文章:
http://blogs.msdn.com/wesdyer/archive/2007/03/23/all-about-iterators.aspx
如果您有任何關於爲什麼會出現上,你可以在一個迭代器塊做這麼多怪異的限制問題,這裏是我7部分系列的動機是什麼不尋常的規則:
http://blogs.msdn.com/ericlippert/archive/tags/Iterators/default.aspx
@slc等待喬恩斯基特的答案.... – 2010-03-25 11:32:23
@Pandiya Chendur::| – leppie 2010-03-25 11:34:33
@leppie是什麼意思? – 2010-03-25 11:38:42