4

在 C# 中,可以使用特殊的方括号语法实例化一个数组new int[3]。这与您通过调用构造函数实例化的其他类型不同new List<int>()。你能用普通的语法来创建一个数组吗?

我试过new System.Array<int>(3)但它爆炸了

非泛型类型“System.Array”不能与类型参数一起使用

4

3 回答 3

8

System.Array本身是抽象的,因此您将无法使用其构造函数对其进行实例化。正如您的错误所证明的那样,它实际上也不是通用的;它只能通过在运行时实现泛型集合接口来获取其类型(另请参见此相关答案):

重要的

在 .NET Framework 2.0 版中,Array 类实现System.Collections.Generic.IList<T>System.Collections.Generic.ICollection<T>System.Collections.Generic.IEnumerable<T>泛型接口。这些实现在运行时提供给数组,因此对文档构建工具不可见。

由于上述原因,System.Array该类提供了一个方便的方法CreateInstance(),您可以使用它来代替:

var array = Array.CreateInstance(typeof(int), 3);

评论

与大多数类不同,Array它提供了CreateInstance方法,而不是公共构造函数,以允许后期绑定访问。

但是,在使用此方法时要非常小心,因为结果在编译时不会array是强类型的!如果你希望它是强类型的,你必须在创建它之后强制转换它(不,仅仅声明是不够的):int[] array

var array = (int[]) Array.CreateInstance(typeof(int), 3);
于 2012-05-31T16:45:07.560 回答
1

没有创建数组的“普通”构造函数语法。您唯一的选择是数组构造函数语法new type[length]和类的各种静态CreateInstance方法Array。请注意,后者是使用返回类型定义的Array,需要先将其转换为实际的数组类型。

顺便说一句:Array.CreateInstance还允许您创建基于非零的数组,否则 C# 无法使用这些数组。但请记住,几乎没有人希望数组和其他 IList 实现具有除零以外的下限。

于 2012-05-31T17:07:42.543 回答
-2

如果要在实例化数组时分配值,也可以在 c# 中使用以下内容。

预定义的IntArrayVariable = new int[]{x,y,z};

于 2013-10-08T21:01:16.257 回答