System.Collections.Generic vs System.Collections?

时间:2015-12-29 16:16:46

标签: c#

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

1 个答案:

答案 0 :(得分:9)

通用集合类型允许强烈输入您的集合。以这个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];

所以:没有装箱和拆箱,没有运行时错误,因为有错误的演员表。类型安全对程序员和用户来说是一种福气。尽可能多地使用泛型集合,如果必须,只使用非泛型集合。