【问题标题】:Is List<Object> a good replacement for ArrayList?List<Object> 是 ArrayList 的一个很好的替代品吗?
【发布时间】:2014-03-21 21:52:54
【问题描述】:

ArrayList,我在旧的 Compact Framework 代码中使用,在新奇的 (.NET 4.5.1) 代码中似乎不可用。

我正在其中存储自定义类的实例。

有什么好的替代品-List&lt;Object&gt;,还是有更合适的?

【问题讨论】:

  • 我们现在有泛型。为什么不重构代码以使用List&lt;CustomClass&gt;
  • C# 是一种静态类型语言。强烈建议您的数据模型尽可能接近现实。这意味着如果您需要表示整数列表,请使用List&lt;int&gt;。如果您需要狗列表,请使用List&lt;Dog&gt;。如果您需要“随便什么”列表,请使用List&lt;Whatever&gt;。通常在 C# 中强烈反对无类型、预泛型实践(可追溯到 .Net 1.1),其中所有内容都是 object 或“字符串类型”。
  • 同意泛型是在 .NET 上工作的正确方式
  • @HighCore 为什么您输入了好的答案作为评论?复制粘贴你的答案没有多大意义,OP ta 也没有什么可以接受的:(

标签: c# arraylist .net-3.5 generic-list .net-4.5


【解决方案1】:

正如@HighCore 在他的评论中提到的,您应该使用List 的通用形式List&lt;T&gt;。如果您定义了多个需要包含在该列表中的类,它们可能具有共同的属性、方法。在这种情况下,您可以为类组创建一个abstract 类。

List&lt;Object&gt; 是一个可能的替代品,但不是一个好的替代品。

【讨论】:

    【解决方案2】:

    是的,List&lt;object&gt;ArrayList 的一个很好的替换

    如果您想要一个可以存储任何东西的列表类型,您可以使用ArrayListList&lt;object&gt; 作为集合类型。它将具有相同的性能和行为特征。

    问题是这样的:你为什么用ArrayList开头?如果您来自 .NET 的预泛型版本,那么您可能别无选择。您要么拥有强类型数组(大小恒定),要么拥有 ArrayList,它的大小是动态的,但类型过于“通用”。它可以存储任何东西。

    现在,有了新的 .NET 和 C# 版本,是时候放下这一切了。

    (关于“net .NET 和 C# 版本”的 cmets:显然这里的“新”并不像 2014 年那样新,但与 OP 从泛型中学到的任何教科书或源代码相比,“新”与使用ArrayList相比。)

    您希望您的集合是强类型的。它让您的生活更轻松,因为您知道集合中的项目上可用的字段/属性/成员等。

    因此,您要做的是弄清楚元素的 base 类型是什么,并将集合设置为 List&lt;BaseType&gt; 或类似的,这将使您的生活充实更容易。

    如果您要存储一堆整数,请使用List&lt;int&gt;。如果要存储一堆字符串,请使用List&lt;string&gt;。如果要存储一堆 SomeCustomObject 类型的对象,请使用 List&lt;SomeCustomObject

    【讨论】:

    • 请务必注意,“新的 .Net 和 C# 版本” 不太准确,因为泛型自 C# 2.0 以来一直存在,可追溯到 2006 年。所以这并不是真正的“新”。
    • 这引出了一个问题,为什么要从 ArrayList 开始?我假设是普通教科书。
    猜你喜欢
    • 2010-11-09
    • 2011-08-23
    • 1970-01-01
    • 2013-09-20
    • 2011-01-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多