C# · 12月 26, 2021

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

我想通过调用在c#中创建一个非零下限一维数组 Array.CreateInstance(typeof(int),new int[] { length },new int[] { lower });

返回的数组的类型不是int [],而是int [*].谁能详细说明这是什么意思?我想要能够将这个数组返回给调用者,例如,

int[] GetArray() { … }

谢谢.

解决方法 是的,这是一个骗子!

矢量和一维数组之间有区别. int []是一个向量.向量(如int [])必须为0.否则,你必须调用它Array.例如:

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

或者(指出这还是以零为基础):

int[] arr2 = (int[]) Array.CreateInstance(typeof (int),new int[] {length},new int[] {0});

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

Array arr3 = Array.CreateInstance(typeof(int),new int[] { lower });

为了使它更加混乱,有以下区别:

typeof(int).MakeArrayType() // a vector,aka int[]typeof(int).MakeArrayType(1) // a 1-d array,**not** a vector,aka int[*]