Согласно документации vs: MakeArrayType()
представляет собой одномерный массив с нижней границей нуля. MakeArrayType(1)
представляет массив с заданным числом измерений.
Например, если тип UnderlyingSystemType int
, возвращаемый тип MakeArrayType()
равен
System.Int32[]
, а тип возврата MakeArrayType(1)
равен System.Int32[*]
.
В чем разница между этими типами.
Разница между .MakeArrayType() и .MakeArrayType(1)
Ответ 1
Существует тонкое различие между .MakeArrayType()
и .MakeArrayType(1)
, как вы видели из возвращаемого типа (Int32[]
versus Int32[*]
). Согласно документации для .MakeArrayType()
:
Примечание. Общая среда выполнения языка делает различие между векторами (т.е. одномерные массивы, всегда ориентированные на нуль) и многомерные массивы. Вектор, который всегда имеет только один размерность, не совпадает с многомерным массивом, который происходит с имеют только одно измерение. Эта перегрузка метода может использоваться только для создавать векторные типы, и это единственный способ создать векторный тип. Используйте перегрузку метода MakeArrayType (Int32) для создания многомерные типы массивов. Источник
Поэтому, когда вы вызываете .MakeArrayType()
, он возвращает вектор (это особая вещь, которая всегда имеет одно измерение). Вызов .MakeArrayType(1)
делает многомерный массив (а не вектор) - просто случается, что он имеет только одно измерение.
Разница между Vector и Array довольно технична, но в основном Vectors получают специальное обращение со стороны CLR, поэтому есть дополнительные инструкции IL, которые работают с ними, и которые могут сделать их более эффективными. Дополнительные сведения о различиях между массивами и векторами см. В разделе http://markettorrent.com/community/7968#Vectors vs. Массивы