实例化没有语言语法的新数组[]

Col*_*nic 4 .net c# arrays

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

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

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

Bol*_*ock 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);
Run Code Online (Sandbox Code Playgroud)

备注

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

是非常当使用这种方法,不过,作为最终小心array将不会在编译时强类型!如果你想要它是强类型的,你必须在创建它之后将它强制转换(不,只是声明int[] array是不够的):

var array = (int[]) Array.CreateInstance(typeof(int), 3);
Run Code Online (Sandbox Code Playgroud)