【问题标题】:Is there any point in using the ArrayList class anymore? [duplicate]不再使用 ArrayList 类有什么意义吗? [复制]
【发布时间】:2013-08-24 15:28:04
【问题描述】:

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

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

【问题讨论】:

  • 优点是you don't have to type the < and >,缺点是it seems to be obsolete soon or later
  • 除了与 .NET 1.1 代码接口外,没有其他原因。
  • @KingKing 真的吗?这就是你发现的优势? ... ?
  • @SimonWhitehead YEAH :)))

标签: c# generics arraylist


【解决方案1】:

我不会将它用于任何新的东西,并且我会在方便的地方将其从现有代码中剔除。 List 消除了许多不必要的类型转换,提高了性能,同时减少了运行时错误的可能性。它现在也很流行,大多数扩展方法和库都将为它构建,而不是 ArrayList,这使它成为更好的选择,即使它在技术上与 ArrayList 相当,但事实并非如此。

除了旧的遗留代码之外,我认为 .NET 如果从库中消失,它根本不会受到影响。

【讨论】:

    【解决方案2】:

    我同意丹尼尔的观点。

    不过,此外,微软在 MSDN 上提供了比较 List<T>ArrayList 的具体性能信息,值得一读。

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

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

    如果值类型用于类型 T,编译器会生成一个 专门针对该值类型的 List 类的实现。 这意味着 List 对象的列表元素不必是 boxed之前的元素可以使用,之后大概500个list 创建元素保存的内存不是装箱列表元素 大于用于生成类实现的内存。

    确保用于类型 T 的值类型实现 IEquatable 通用接口。如果不是,则必须使用 Contains 等方法 调用 Object.Equals(Object) 方法,该方法将受影响的列表装箱 元素。如果值类型实现了 IComparable 接口并且 您拥有源代码,还实现 IComparable 泛型 防止 BinarySearch 和 Sort 方法装箱的接口 列出元素。如果您不拥有源代码,请传递 IComparer BinarySearch 和 Sort 方法的对象

    使用特定于类型的实现对您有利 List 类而不是使用 ArrayList 类或编写一个 自己强类型的包装器集合。原因是你 实现必须完成 .NET Framework 已经为您完成的工作, 并且公共语言运行时可以共享微软中间 语言代码和元数据,而您的实现则不能。

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 2014-01-15
        • 2018-02-16
        • 1970-01-01
        • 1970-01-01
        • 2011-03-15
        • 1970-01-01
        • 2011-03-03
        • 2012-08-07
        • 2011-11-10
        相关资源
        最近更新 更多