T[]
означает массив с нулями T (массив [0] является его первым элементом)
T[*]
означает массив не с нулями T (массив [0] не является его первым элементом и даже может выходить за пределы)
Ссылка из вашего вопроса объясняет, что не существует массива типа T[*,*]
, потому что все многомерные массивы T[,]
обрабатываются как массивы с неизвестной нижней границей.
Фрагмент кода ниже показывает, как вы можете создать экземпляр T[*]
.Обратите внимание, что вы не можете привести его к T[]
, потому что они разных типов.a[0]
здесь будет выдано исключение OutOfRangeException, индекс первого элемента в этом массиве равен 1 (ах, старые добрые дни Паскаля ...) .
Array a = Array.CreateInstance(typeof(String), new Int32[] { 1 }, new Int32[] { 1 });
Console.WriteLine(a.GetType()); // System.String[*]
Пример кода
Bonus. В спецификации языка C # написано, "Индексы элементов массива находятся в диапазоне от 0 до Length - 1" .Очевидно, что язык не обеспечивает встроенную поддержку массивов, не основанных на нулях, это просто пользовательская структура данных, которую вы можете создать;хотя он и специфичен в том смысле, что у компилятора есть специальный символ для его типа, а VS использует стандартный визуализатор массива для них при отладке.
См. Также:
Как создать одномерный массив в C # с индексом, начинающимся с 1
C #: ненулевоймассивы не соответствуют CLS