Почему ненулевые массивы с рангом 1 и 2 имеют разные типы? - PullRequest
3 голосов
/ 30 сентября 2019

.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

1 Ответ

1 голос
/ 30 сентября 2019

1-мерный массив на основе 0 является особенным. Это «векторный массив». Они сильно оптимизируются с помощью CLR.

Любой массив, который не основан на 0 или не является 1-мерным, не является векторным массивом.
Следовательно, int[,] не является векторным массивом, поэтому 2-йЛитейные работы.
int[*] и int[] действительно разные типы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...