Какова цель Array.GetLowerBound(int)?

Я не понимаю цели Array.GetLowerBound().

Всегда ли он возвращает ненулевое значение? Когда? Как?

Спасибо.

Ответы

Ответ 1

В многомерном массиве в VB или различных COM-интерфейсах API вы можете запросить нижнюю границу измерения. Типы массивов могут быть основаны на 0 или 1 (т.е. начиная с нуля или 1), и это также относится к многомерным массивам.

Это также может применяться к массивам, открытым через COM-взаимодействие. Например, многие API-интерфейсы Excel используют массивы на основе 1, а многие функции API используют варианты массивов в качестве параметров (вариант по существу был изобретен как тип данных для ячейки электронной таблицы).

При использовании COM-взаимодействия вы все равно должны хорошо играть с этими API-интерфейсами и типами систем. Первоначально они были предназначены для использования с VBA, а "классические" варианты VB4-6 имели систему барочного типа из-за их плотной связи с COM. Системы типа .Net С# et. и др. несколько менее болезненны, чем их предшественники на основе COM, но вы все еще чувствуете боль при использовании COM-взаимодействия.

Ответ 2

Теоретически вы можете создавать массивы с любой нижней или верхней границей для индексирования. VB.NET может использовать это, чтобы сделать массивы с нижней границей 1, чтобы быть совместимыми с некоторыми более старыми версиями VB, но вы действительно можете использовать Array.CreateInstance( Type, Int32 [], Int32 []), чтобы создать массив с любой нижней границей, которую вы хотите.

Ответ 3

Существует один вызов CreateInstance, который устанавливает ненулевые нижние границы:

CreateInstance(Type, Int32[], Int32[])
Создает многомерный массив заданных типов и размерных длин с указанными нижними границами.

Сравните это с:

CreateInstance(Type, Int32[])
Создает многомерный массив заданных типов и размерных длин, с нулевым индексированием. Длины размеров задаются в массиве из 32-битных целых чисел.

(Или любой из других перегрузок на самом деле. Из шести перегрузок CreateInstance пять создают нулевой массив.)