使用ArrayList类有什么意义吗?

时间:2013-08-22 03:42:16

标签: c# generics arraylist

我意识到如果你运行的是.NET 1.1,那么泛型就不可用了。但是,如果您使用的是.NET 2.0+,那么使用ArrayList类比List<object>更有优势吗?

基本上,只要您将类型 T 声明为System.Object,那么为什么不使用List<T>类呢?

3 个答案:

答案 0 :(得分:4)

我不会将它用于任何新的东西,而且我还要把它从现有的代码中分解出来,这样做很方便。 List消除了许多不必要的类型转换,提高了性能,同时减少了运行时错误的可能性。它现在也非常普遍,大多数扩展方法和库都是为它构建的,而不是ArrayList,这使它成为一个更好的选择,即使它在技术上与ArrayList相同,但它不是。

除了旧的遗留代码之外,如果它只是从库中消失,我不相信.NET会受到影响。

答案 1 :(得分:3)

我同意丹尼尔。

此外,Microsoft在MSDN上提供的具体效果信息比较List<T>ArrayList值得一读。

http://msdn.microsoft.com/en-us/library/6sh2ey19.aspx

  

在决定是否使用List或ArrayList类时   其中有类似功能,请记住List类   在大多数情况下表现更好,并且类型安全。如果引用类型是   用于List类的T类,这两个类的行为   是相同的。但是,如果值类型用于类型T,则需要   考虑实施和拳击问题。

     

如果值类型用于类型T,则编译器生成一个   专门为该值类型实现List类。   这意味着List对象的list元素不一定是   在元素可以使用之前装箱,并且在大约500个列表之后   元素被创建的内存保存不是拳击列表元素   大于用于生成类实现的内存。

     

确保用于类型T的值类型实现   IEquatable通用接口。如果不是,那么像Contains这样的方法必须   调用Object.Equals(Object)方法,该方法将受影响的列表打包   元件。如果值类型实现IComparable接口和   你拥有源代码,也实现了IComparable泛型   接口,以防止BinarySearch和Sort方法从拳击   列表元素。如果您不拥有源代码,请传递IComparer   反对BinarySearch和Sort方法

     

使用特定于类型的实现对您有利   列表类而不是使用ArrayList类或编写   自己强类型的包装器集合。原因是你的   实现必须做.NET Framework为您做的事情,   公共语言运行库可以共享Microsoft中间件   语言代码和元数据,您的实现不能。

答案 2 :(得分:0)

列表是一个更好的选择,其中类型转换在复杂应用程序中成为一个更大的问题