【问题标题】:What is the generic alternative of Array?Array 的通用替代方案是什么?
【发布时间】:2009-02-24 17:36:38
【问题描述】:

在 C# 中,某些集合(例如 ArrayListHashTable)具有通用替代项,即 List<T>Dictionary<TKey, TValue>

Array 是否也有通用替代方案?

【问题讨论】:

    标签: c# .net arrays generics


    【解决方案1】:

    不 - 只使用强类型数组,例如int[]。首先使用“弱类型”Array 是比较少见的——事实上,我不相信你真的可以创建一个。每个Array 都是一个真正的强类型,即使你没有那样引用它。

    【讨论】:

    • 我会说 T[] 是 Array 的泛型替代品,除了它在泛型之前存在。
    • 具有引用类型元素的数组怎么样?你可以有一个对象数组或动物数组..
    • 这只是 string[] 或 Animal[]。我只选择了 int[] 作为一个随机示例 - 实际上 int 部分并不重要。
    【解决方案2】:

    如果您正在寻找与数组最相似的通用集合类型,那么您可能需要List<T>。但这并不是一回事。

    扩展其他人所说的:拥有泛型类型的目的是让程序员可以根据当前程序的需要使用这些泛型类型的类型特定实例。数组已经是特定类型的。您可以随时使用T[]

    例如,看这个简单的函数定义:

    void SomeFunction(int[] x) 
    

    你也可以这样想:

    void SomeFunction<T>(T[] x) 
    

    程序员刚刚选择使用int 作为类型参数调用它:

    SomeFunction<int>(myIntArray)
    

    【讨论】:

    • 你能像在 Array 中那样拥有一个二维或更多维 List 吗?
    • 你可以有 List>,但就像我之前说的:这不是一回事。如果你经常使用二维数组,你可能做错了什么。
    • 查看此内容(由 C# 语言设计者之一编写):blogs.msdn.com/ericlippert/archive/2008/09/22/…
    【解决方案3】:

    数组在特殊的编译器支持下一直是通用的。

    例如System.Array 允许对象进入,但 int[] 不允许。

    【讨论】:

      【解决方案4】:

      扩展乔恩的答案

      数组没有通用的替代品,因为拥有一个通用数组就很好。

      public static T[] CreateArray<T>(T item1, T item2) {
         T[] array = new T[2];
         array[0] = item1;
         array[1] = item2;
         return array;
      }
      

      【讨论】:

        【解决方案5】:

        不需要通用替代方案,因为当您定义数组时,您会声明数组的类型。您提到的所有类都是简单的集合类。数组是完全不同的数据结构。

        【讨论】:

        • 你能解释一下区别吗?
        猜你喜欢
        • 2016-12-23
        • 2021-11-13
        • 2018-12-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-07-08
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多