我已经在几个地方读过,应该使用System.Collections.Generic命名空间中的泛型集合类而不是System.Collections命名空间中的ArrayList之类的类。我无法理解,它是如何更好的,因为两者都是收藏品?
答案 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];
所以:没有装箱和拆箱,没有运行时错误,因为有错误的演员表。类型安全对程序员和用户来说是一种福气。尽可能多地使用泛型集合,如果必须,只使用非泛型集合。