为什么具有 1 和 2 秩的非零基数组具有不同的类型?
Why non zero based arrays with 1 and 2 rank have different types?
.Net 具有非零基数组的特殊内部类型。
C# 语言没有这种类型的语法,所以你不能转换成这种类型。
但是二维非零基数组具有普通数组类型。
我想知道为什么只有一维数组有特殊类型?
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
从0开始的一维数组是特殊的。这是一个"vector array"。它们由 CLR 进行了大量优化。
任何非基于 0 或非一维的数组都不是向量数组。
因此,int[,]
不是向量数组,因此第二次转换有效。
int[*]
和int[]
确实是不同的类型。
.Net 具有非零基数组的特殊内部类型。
C# 语言没有这种类型的语法,所以你不能转换成这种类型。
但是二维非零基数组具有普通数组类型。
我想知道为什么只有一维数组有特殊类型?
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
从0开始的一维数组是特殊的。这是一个"vector array"。它们由 CLR 进行了大量优化。
任何非基于 0 或非一维的数组都不是向量数组。
因此,int[,]
不是向量数组,因此第二次转换有效。
int[*]
和int[]
确实是不同的类型。