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

本文关键字:数组 新数组 语言 语法 实例化 | 更新日期: 2023-09-27 18:36:00

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

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

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

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

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);

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

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

如果要在

实例化数组时赋值,也可以在 c# 中使用以下方法。

predefinedIntArrayVariable = new int[]{x,y,z};