数组的通用替代品是什么?

3

在C#中,一些集合类型(例如ArrayListHashTable)都有泛型替代品,它们分别是List<T>Dictionary<TKey, TValue>

那么,数组是否也有泛型替代品呢?

5个回答

6
不需要 - 只需使用强类型数组,例如 int[]。实际上很少使用“弱类型”Array - 事实上,我认为你不能真正地创建一个。每个Array都是强类型的,即使你不这样引用它。

我会说 T[] 是 Array 的通用替代品,只不过它在泛型出现之前就存在了。 - configurator
数组有参考类型元素怎么样?你可以拥有一个对象数组或者动物数组。 - Gulzar Nazim
那只是string[]或Animal[]。我只选择int[]作为随机示例 - 实际上int部分并不重要。 - Jon Skeet

4
如果您正在寻找最接近数组的通用集合类型,则可能需要使用List。但它并不完全相同。
进一步解释:泛型类型的目的是让程序员可以根据当前程序的需要使用特定类型的泛型类型实例。数组已经具有特定类型。您始终可以使用T[]。
例如,看看这个简单的函数定义:
void SomeFunction(int[] x) 

你可以这样想:

您也可以这样考虑:

void SomeFunction<T>(T[] x) 

在这里,程序员只选择使用 int 作为类型参数进行调用:

SomeFunction<int>(myIntArray)

你能否像数组一样拥有一个二维或多维的List<T>? - Ali
你可以有List<List<T>>,但就像我之前说的那样:它并不是真正的同一件事。如果你经常使用二维数组,那么你可能在做其他错误的事情。 - Joel Coehoorn
请查看以下内容(由C#语言设计师之一编写):http://blogs.msdn.com/ericlippert/archive/2008/09/22/arrays-considered-somewhat-harmful.aspx - Joel Coehoorn

4

有特殊的编译器支持,数组一直以来都是相当通用的。

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


1

在Jon的回答上进行扩展

数组没有通用替代品,因为拥有通用数组是完全可以的。

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

0

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


请问您能否解释一下它们之间的区别? - Ali

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接