2011-04-05 97 views

回答

9

非通用接口用於向後兼容。如果您使用泛型編寫代碼並想將集合傳遞給以.NET 1.0編寫的某個模塊(它沒有泛型),那麼您仍然希望這樣做能夠成功,並且您希望舊方法能夠遍歷它。

0

IEnumerable<T>繼承IEnumerable所以它也適用於ICollection<T>。它只是明確地陳述將繼續存在的遺傳。

11

IEnumerable<T>本身強制任何實現也執行非泛型IEnumerable。這是安全的,因爲與.NET 4一樣,IEnumerable<out T>是協變的...您始終可以將T轉換爲object作爲非通用形式。

基本上這意味着如果你的代碼使用IEnumerable類型的參數,你仍然可以用類似List<T>的方法來調用它。

埃裏克利珀寫了blog post recently爲什麼藏品最終實現多個接口,和布拉德·艾布拉姆斯寫了blog post back in 2005關於特定IEnumerable<T>/IEnumerable決定。

相關問題