2012-10-03 34 views

回答

3

根本不能在IEnumerator<T>上使用foreach

只能foreach在具有GetEnumerator方法(它是否實現IEnumerable

因此,要回答你的問題,它使用從IEnumerable<T>GetEnumerator方法的對象。

很簡單證明。試圖編譯這個:

IEnumerator<char> str = "asdf".GetEnumerator(); 
foreach (char c in str) { } 
+0

哦,我沒有注意到。以爲foreach接受或者直接喜歡迭代器接口。 Thx爲您的答案。 – Beachwalker

+0

......由於下面描述的基於模式的「鴨子打字」和Eric的博客,錯過了這一點。 – Beachwalker

1

另請注意,這不是集合實現IEnumerable/IEnum的要求erator以便在foreach循環中使用。的foreach使用基於模型的方法,因爲這裏所描述Eric Lippert blog

1

另一個(更多相關的)問題是:如果什麼類型實現IEnumerable<>明確,並在同一時間有一個普通的公共方法GetEnumerator(),適合?答案:然後使用公共方法。

如果什麼類型實現了IEnumerable<Foo>IEnumerable<Bar>?然後,如果沒有常規實例方法GetEnumerator()(如果兩個接口都顯式實現,則可能發生這種情況),則會出現編譯時錯誤。

相關問題