【问题标题】:Why non zero based arrays with 1 and 2 rank have different types?为什么具有 1 和 2 秩的非零基数组具有不同的类型?
【发布时间】:2019-09-29 21:29:18
【问题描述】:

.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

【问题讨论】:

  • 你不能转换成这种类型你可以。有一些技巧。

标签: c# arrays .net .net-core clr


【解决方案1】:

基于 0 的一维数组是特殊的。这是一个“向量数组”。它们由 CLR 进行了大量优化。

任何不是基于 0 或不是一维的数组都不是向量数组。
因此,int[,] 不是向量数组,因此第二次转换有效。
int[*]int[] 是真正不同的类型。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-09-21
    • 2021-07-11
    • 2018-06-16
    • 2016-08-02
    • 2015-12-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多