为什么维数为1和2的非零基数组具有不同类型?

3

.Net有一个专门的内部类型用于非零基数组。

C#语言没有这种类型的语法,因此无法将其转换为此类型。

但是2D非零基数组具有普通数组类型。

我想知道为什么只有1D数组有特殊类型?

var array1 = (int[]) Array.CreateInstance( typeof( int ), new[] { 6 }, new[] { -1 } ); // System.InvalidCastException : Unable to cast object of type 'System.Int32[*]' to type 'System.Int32[]'
var array2 = (int[,]) Array.CreateInstance( typeof( int ), new[] { 6, 6 }, new[] { -1, -1 } ); // it works

你不能将其转换为此类型。但是可以通过一些技巧实现。 - user4003407
1个回答

1

一个0-based的一维数组是特殊的。它是一个"向量数组"。它们被CLR进行了大量优化。

任何不是0-based或不是一维的数组都不是向量数组。
因此,int[,]不是向量数组,所以第二个强制转换有效。
int[*]int[]是真正不同的类型。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接