Question

Dans le code ci-dessous

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

Quel est le point de demander l'aide de LBound?Sûrement, c'est toujours 0.

Était-ce utile?

La solution

Pourquoi ne pas l'utiliser For Each?De cette façon, vous n'avez pas besoin de se soucier de ce que les LBound et UBound sont.

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

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

Autres conseils

Il y a une bonne raison de NE PAS UTILISER For i = LBound(arr) To UBound(arr)

dim arr(10) alloue des onze membres de la matrice, de 0 à 10 (en supposant que le VB6 par défaut de l'Option de Base).

De nombreux programmeurs VB6 assumer le tableau est basé sur un, et de ne jamais utiliser les alloué arr(0).On peut supprimer une source potentielle de bogues en utilisant For i = 1 To UBound(arr) ou For i = 0 To UBound(arr), car alors il est clair que arr(0) il est utilisé.

For each fait une copie de chaque élément du tableau, plutôt qu'un pointeur.

Cela a deux problèmes.

  1. Lorsque l'on cherche à attribuer une valeur à un élément de tableau, il ne reflète pas sur l'original.Ce code attribue une valeur de 47 à la variable i, mais n'affecte pas les éléments 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. Nous ne savons pas l'indice d'un élément dans un tableau for each, et nous ne sommes pas garanti l'ordre des éléments (bien qu'il semble être dans l'ordre.)

LBound ne peut pas toujours être 0.

Alors qu'il n'est pas possible de créer un tableau qui n'a plus rien d'autre qu'un 0 limite Inférieure en VBScript, il est toujours possible de récupérer un tableau de variantes à partir d'un composant COM qui peut avoir spécifié un autre LBound.

Cela dit je n'ai jamais rencontré un qui a fait quelque chose comme ça.

Probablement, il vient de VB6.Car avec Option Base déclaration en VB6, vous pouvez modifier la limite inférieure de tableaux comme ceci:

Option Base 1

Aussi en VB6, vous pouvez modifier la limite inférieure d'une matrice spécifique comme ceci:

Dim myArray(4 To 42) As String

J'ai toujours utilisé Pour Chaque...

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top