我已经在几个地方读过,应该使用System.Collections.Generic命名空间中的泛型集合类而不是System.Collections命名空间中的ArrayList之类的类.我无法理解,它是如何更好的,因为两者都是收藏品?
通用集合类型允许强烈键入集合.以此为例ArrayList
,我们想要包含狗:
ArrayList a = new ArrayList(); a.Add(new Dog());
如果你想获得第一个项目,你需要转换结果,因为Dog d = a[0];
不起作用.所以我们这样做:
Dog d = (Dog)a[0];
但编译器也允许这样:
Cat c = (Cat)a[0];
泛型允许您这样做:
Lista = new List (); a.Add(new Dog()); Dog d = a[0];
看到!没有铸造.我们没有必要帮助编译器理解该列表中只能有狗.它知道这一点.
此外,这将无法编译:
Cat c = a[0];
所以:没有装箱和拆箱,没有运行时错误,因为有错误的演员.类型安全对程序员和用户来说是一种福气.尽可能多地使用泛型集合,如果必须,只使用非泛型集合.