2008-08-05 19 views

Répondre

45

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

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

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

Vous ne pouvez pas utiliser 'For Each' pour éditer directement des cellules de tableau, puisque' y' dans votre exemple est une copie de la cellule du tableau, pas sa référence. Pour l'édition de tableau, 'Pour i = LBound (arr) Pour UBound (arr)' permettra de se référer à la cellule directement en utilisant 'arr (i)' et modifier le contenu de la cellule (comme 'arr (i) = Trim (arr (i)) '). –

1

Probablement il vient de VB6. Parce qu'avec la déclaration Option Base dans VB6, vous pouvez modifier la limite inférieure des tableaux comme celui-ci:

Option Base 1 

également dans VB6, vous pouvez modifier la limite inférieure d'un tableau spécifique comme celui-ci:

Dim myArray(4 To 42) As String 
1

J'ai toujours utilisé pour chaque ...

16

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

dim arr(10) onze membres du alloue tableau, 0 à 10 (en supposant que le VB6 par défaut Option Base).

De nombreux programmeurs VB6 supposent que le tableau est basé sur un, et n'utilisent jamais le arr(0) alloué. Nous pouvons 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 si arr(0) est utilisé.

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

Cela a deux problèmes.

  1. Lorsque nous essayons d'affecter une valeur à un élément de tableau, il ne reflète pas sur l'original. Ce code affecte 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 de tableau dans un for each, et nous ne sommes pas garanti la séquence d'éléments (bien qu'il semble être dans l'ordre.)

3

LBound peut ne pas toujours être 0.

S'il n'est pas possible de créer un tableau qui a autre chose qu'une borne inférieure 0 dans VBScript, il est toujours possible de récupérer un tableau de variantes à partir d'un composant COM ent qui peut avoir spécifié un différent LBound.

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