Какова цель 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
пять создают нулевой массив.)