Подтвердить что ты не робот

Почему typeof (Object [,] []). Имя равно "Object [] [,]"?

Оценка typeof(Object[,][]).Name дает Object[][,]

Аналогично, typeof(Object[][,]).Name дает Object[,][]

Кажется, что запятая движется без причины.

Что дает?

4b9b3361

Ответ 1

Смешивание рваных и прямоугольных массивов - это рецепт безумия. Ваша интуиция о том, что означает обозначение определенного типа, почти всегда ошибочна или, по крайней мере, моя.

Прочитайте мою статью по этому вопросу и посмотрите, поможет ли это вам понять, что здесь происходит:

http://blogs.msdn.com/b/ericlippert/archive/2009/08/17/arrays-of-arrays.aspx

В основном: С# и отражение обозначают смешанные рваные/прямоугольные массивы двумя разными способами, каждый по своим причинам.

Ответ 2

Оставив в стороне цель, для которой вы, возможно, захотите объявить такой экзотический массив, похоже на то, как отражение создает имя массива, является рекурсивным: во-первых, оно выдает имя типа элемента массива, а затем добавляет квадратные скобки с соответствующим количеством запятых.

Object[,][] представляет собой 2D массив из 1D массивов; тип элемента 2D-массива равен Object[], поэтому общий результат "Object[]"+"[,]".

Вот еще одна иллюстрация того, как работает алгоритм:

typeof(Object[][,][,,][,,,][,,,,]).Name

является

Object[,,,,][,,,][,,][,][]

Я не вижу причины для этого, кроме эффективности реализации: до тех пор, пока он согласован, не имеет значения, соответствует ли синтаксис С# или нет. В конце концов, С# не является единственным языком в юниверсе .NET.