Почему typeof (Object [,] []). Имя равно "Object [] [,]"?
Оценка typeof(Object[,][]).Name дает Object[][,]
Аналогично, typeof(Object[][,]).Name дает Object[,][]
Кажется, что запятая движется без причины.
Что дает?
Ответ 1
Смешивание рваных и прямоугольных массивов - это рецепт безумия. Ваша интуиция о том, что означает обозначение определенного типа, почти всегда ошибочна или, по крайней мере, моя.
Прочитайте мою статью по этому вопросу и посмотрите, поможет ли это вам понять, что здесь происходит:
В основном: С# и отражение обозначают смешанные рваные/прямоугольные массивы двумя разными способами, каждый по своим причинам.
Ответ 2
Оставив в стороне цель, для которой вы, возможно, захотите объявить такой экзотический массив, похоже на то, как отражение создает имя массива, является рекурсивным: во-первых, оно выдает имя типа элемента массива, а затем добавляет квадратные скобки с соответствующим количеством запятых.
Object[,][] представляет собой 2D массив из 1D массивов; тип элемента 2D-массива равен Object[], поэтому общий результат "Object[]"+"[,]".
Вот еще одна иллюстрация того, как работает алгоритм:
typeof(Object[][,][,,][,,,][,,,,]).Name
является
Object[,,,,][,,,][,,][,][]
Я не вижу причины для этого, кроме эффективности реализации: до тех пор, пока он согласован, не имеет значения, соответствует ли синтаксис С# или нет. В конце концов, С# не является единственным языком в юниверсе .NET.