C#:Array.CreateInstance:无法将[*]类型的对象强制转换为类型[]

Can*_*hiu 12 c#

我想通过调用在c#中创建一个非零下界一维数组

Array.CreateInstance(typeof(int), new int[] { length }, new int[] { lower });
Run Code Online (Sandbox Code Playgroud)

返回数组的类型不是int [],而是int [*].任何人都可以详细说明这是什么意思?我希望能够将此数组返回给调用者,例如,

int[] GetArray() { ... }
Run Code Online (Sandbox Code Playgroud)

谢谢.

Mar*_*ell 15

是的,这是一个难题!

矢量和一维数组之间存在差异.An int[]是一个向量.矢量(如an int[])必须基于0.否则,你必须打电话给它Array.例如:

// and yes, this is doing it the hard way, to show a point...
int[] arr1 = (int[]) Array.CreateInstance(typeof(int), length);
Run Code Online (Sandbox Code Playgroud)

或(注意这仍然是零基础):

int[] arr2 = (int[]) Array.CreateInstance(typeof (int),
      new int[] {length}, new int[] {0});
Run Code Online (Sandbox Code Playgroud)

如果你的数组不能从0开始,那么抱歉:你必须使用Array,而不是int[]:

Array arr3 = Array.CreateInstance(typeof(int),
      new int[] { length }, new int[] { lower });
Run Code Online (Sandbox Code Playgroud)

为了让它更加混乱,两者之间存在差异:

typeof(int).MakeArrayType() // a vector, aka int[]
typeof(int).MakeArrayType(1) // a 1-d array, **not** a vector, aka int[*]
Run Code Online (Sandbox Code Playgroud)