Pergunta

No código abaixo

For i = LBound(arr) To UBound(arr)

Qual é o sentido de perguntar usando LBound?Certamente isso é sempre 0.

Foi útil?

Solução

Por que não usar For Each?Dessa forma você não precisa se preocupar com o que LBound e UBound são.

Dim x, y, z
x = Array(1, 2, 3)

For Each y In x
    z = DoSomethingWith(y)
Next

Outras dicas

Há uma boa razão para NÃO USAR For i = LBound(arr) To UBound(arr)

dim arr(10) aloca onze membros da matriz, de 0 a 10 (assumindo a Option Base padrão do VB6).

Muitos programadores VB6 assumem que o array é baseado em um e nunca usam o alocado arr(0).Podemos remover uma fonte potencial de bugs usando For i = 1 To UBound(arr) ou For i = 0 To UBound(arr), porque então fica claro se arr(0) está sendo usado.

For each faz uma cópia de cada elemento do array, em vez de um ponteiro.

Isto tem dois problemas.

  1. Quando tentamos atribuir um valor a um elemento do array, isso não reflete no original.Este código atribui um valor de 47 à variável i, mas não afeta os elementos de arr.

    arr = Array(3,4,8)
    for each i in arr
         i = 47
    next i
    Response.Write arr(0) '- returns 3, not 47

  2. Não sabemos o índice de um elemento de array em um for each, e não temos garantia da sequência de elementos (embora pareça estar em ordem).

LBound nem sempre pode ser 0.

Embora não seja possível criar um array que tenha algo diferente de 0 Limite inferior em VBScript, ainda é possível recuperar um array de variantes de um componente COM que pode ter especificado um valor diferente. LBound.

Dito isto, nunca encontrei alguém que fizesse algo assim.

Provavelmente vem do VB6.Porque com Base de Opção instrução em VB6, você pode alterar o limite inferior dos arrays como este:

Option Base 1

Também no VB6, você pode alterar o limite inferior de um array específico assim:

Dim myArray(4 To 42) As String

Eu sempre usei For Each...

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top