我意识到如果你运行的是.NET 1.1,那么泛型就不可用了。但是,如果您使用的是.NET 2.0+,那么使用ArrayList
类比List<object>
更有优势吗?
基本上,只要您将类型 T 声明为System.Object
,那么为什么不使用List<T>
类呢?
答案 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)
列表是一个更好的选择,其中类型转换在复杂应用程序中成为一个更大的问题