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

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

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

Ответы

Ответ 1

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

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

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

Ответ 2

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

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

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