我意识到,如果您运行的是 .NET 1.1,那么泛型将不可用。但是,如果您使用的是 .NET 2.0+,那么使用ArrayList
该类是否有任何优势List<object>
?
基本上,只要您将类型T声明为System.Object
,那么为什么不使用List<T>
该类呢?
我不会将它用于任何新的东西,并且我强调将其从现有代码中提取出来,以便于这样做。List 消除了许多不必要的类型转换,提高了性能,同时减少了运行时错误的可能性。它现在也很流行,大多数扩展方法和库都将为它构建,而不是 ArrayList,这使它成为更好的选择,即使它在技术上与 ArrayList 相当,但事实并非如此。
除了旧的遗留代码之外,我不相信 .NET 会因为它从库中消失而受到影响。
我同意丹尼尔。
但是,此外,在 MSDN 上还有来自 Microsoft 的特定性能信息比较List<T>
,ArrayList
值得一读。
http://msdn.microsoft.com/en-us/library/6sh2ey19.aspx
在决定是使用 List 还是 ArrayList 类时,两者都具有相似的功能,请记住 List 类在大多数情况下性能更好并且是类型安全的。如果引用类型用于 List 类的类型 T,则两个类的行为是相同的。但是,如果将值类型用于类型 T,则需要考虑实现和装箱问题。
如果值类型用于类型 T,则编译器会专门为该值类型生成 List 类的实现。这意味着 List 对象的列表元素在使用之前不必装箱,并且在创建大约 500 个列表元素后,不装箱列表元素节省的内存大于用于生成类实现的内存。
确保用于类型 T 的值类型实现 IEquatable 泛型接口。如果不是,则 Contains 等方法必须调用 Object.Equals(Object) 方法,该方法将受影响的列表元素装箱。如果值类型实现了 IComparable 接口并且您拥有源代码,则还实现 IComparable 泛型接口以防止 BinarySearch 和 Sort 方法装箱列表元素。如果您不拥有源代码,请将 IComparer 对象传递给 BinarySearch 和 Sort 方法
使用 List 类的特定于类型的实现而不是使用 ArrayList 类或自己编写强类型包装器集合对您有利。原因是您的实现必须完成 .NET Framework 已经为您完成的工作,并且公共语言运行时可以共享 Microsoft 中间语言代码和元数据,而您的实现则不能。
List 是一个更好的选择,其中类型转换在复杂的应用程序中成为一个更大的问题