Индексы массива основаны на 0 в VB6?

Я просматриваю автоматический перевод кода VB6 на C#, а преобразователь перевел someArray(3) в someArray[3]. Но в соответствии со старой документацией по коду он должен выбирать третий элемент, а не четвертый, как это делается в переведенной версии.

Индексы массива основаны на 0 в VB6? Или они начинаются с 1?


person Jader Dias    schedule 09.01.2012    source источник
comment
Является ли это объявлением массива или доступом к элементу массива?   -  person Cody Gray    schedule 09.01.2012
comment
@Cody Доступ к элементу массива.   -  person Jader Dias    schedule 09.01.2012


Ответы (2)


Да - массивы (обычно) 0 основаны на VB6

Исключения составляют случаи, когда используется явный синтаксис Dim someArray(1 To 10) as Int или когда Option Base 1 объявляется в верхней части модуля кода.

Это Collections, которые не являются - когда вы перебираете Collection объекты, я почти уверен, что они основаны на 1.

person Jon Egerton    schedule 09.01.2012
comment
Если не использовался синтаксис явного типа Или Option Base 1 был объявлен в верхней части блока кода - person Matt Wilko; 09.01.2012
comment
@Matt Это утверждение влияет только на текущий файл? - person Jader Dias; 09.01.2012
comment
@XMLforDummies: Да - в VB6 у вас есть операторы Option в верхней части каждого файла кода. - person Jon Egerton; 09.01.2012
comment
@XMLforDummies - Да, поэтому, если, скажем, у вас есть два модуля, а ModuleA имеет объявленную Option Base 1, то любой массив, объявленный в ModuleA, основан на 1. - person Matt Wilko; 09.01.2012
comment
Если явно не указано иное в момент объявления массива. Это усложняется. Это одна из причин, по которой они изменили это для VB.NET. - person Cody Gray; 09.01.2012

Короткий ответ заключается в том, что нижние границы массива — это то, что вы указываете им быть.

по умолчанию используется базовое значение 0 (если только оно не переопределено значением Option Base 1), но вы можете объявить нижнюю границу любого значения (Dim arr(-42 To 42) так же допустимо, как и Dim(3)).

Кроме того, если массив возвращается каким-либо объектом, его нижняя граница определяется тем значением, которое этот объект устанавливает для него. Например, ссылка Excel Range.Value вернет массив на основе 1.

person chris neilsen    schedule 09.01.2012