2011-04-05 143 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决定。

相关问题