2012-01-09 7 views
14

Estoy revisando una traducción automática de código VB6 a C# y el convertidor tradujo someArray(3) a someArray[3]. Pero, de acuerdo con la documentación del código anterior, debe elegir el tercer elemento, no el cuarto, como está haciendo en la versión traducida.¿Los índices de matriz están basados ​​en 0 en VB6?

¿Los índices de matriz están basados ​​en 0 en VB6? ¿O comienzan en 1?

+0

¿Es esto una matriz * declaración * o acceder a una matriz * elemento *? –

+0

@Cody Acceso a un elemento de matriz. –

Respuesta

14

Sí - matrices son (en general) 0 basan en VB6

Las excepciones a esto son cuando se ha utilizado la sintaxis explícita Dim someArray(1 To 10) as Int, o cuando Option Base 1 se declara en la parte superior del módulo de código.

Son Collections que no lo son - cuando recorres los objetos Collection Estoy bastante seguro de que están basados ​​en 1.

+4

"A menos que se haya utilizado la sintaxis de tipo explícito" * O * 'La opción Base 1' se ha declarado en la parte superior del bloque de código –

+0

@Matt: Buen punto. –

+0

@Matt ¿Esta afirmación afecta solo al archivo actual? –

6

La respuesta corta es que los límites inferiores de la matriz son los que dicen.

El por defecto es la base 0 (a menos que exista Option Base 1), pero se puede declarar la cota inferior a cualquier valor que desee (Dim arr(-42 To 42) es tan válida como Dim(3)).

Además, si algún objeto devuelve una matriz, su límite inferior es el objeto al que lo establece. Por ejemplo, una referencia ExcelRange.Value devolverá una matriz basada en 1.

Cuestiones relacionadas