System.Collections.Generic vs System.Collections? [复制]

Posted

技术标签:

【中文标题】System.Collections.Generic vs System.Collections? [复制]【英文标题】:System.Collections.Generic vs System.Collections? [duplicate] 【发布时间】:2016-04-03 13:31:21 【问题描述】:

我在几个地方读到过,应该使用 System.Collections.Generic 命名空间中的通用集合类,而不是 System.Collections 命名空间中的 ArrayList 等类。我无法理解,因为两者都是收藏品,它如何更好?

【问题讨论】:

泛型一提供编译类型安全 泛型是后来添加到框架中的。一般来说,这意味着您可以使用类型化集合,而不是对象集合。 【参考方案1】:

通用集合类型允许强类型化您的集合。以这个ArrayList 为例,我们想要包含狗:

ArrayList a = new ArrayList();
a.Add(new Dog());

如果要取出第一个项目,则需要转换结果,因为Dog d = a[0]; 不起作用。所以我们这样做:

Dog d = (Dog)a[0];

但编译器也允许这样做:

Cat c = (Cat)a[0];

泛型允许您这样做:

List<Dog> a = new List<Dog>();
a.Add(new Dog());

Dog d = a[0];

看!没有铸造。我们不必帮助编译器了解该列表中只能有狗。它知道。

另外,这不会编译:

Cat c = a[0];

所以:没有装箱和拆箱,没有运行时错误,因为有错误的演员表。类型安全是程序员和用户的福气。尽可能多地使用泛型集合,并且仅在必要时使用非泛型集合。

【讨论】:

谢谢,现在我可以更清楚地理解了。

以上是关于System.Collections.Generic vs System.Collections? [复制]的主要内容,如果未能解决你的问题,请参考以下文章