2008-08-05 3 views

Antwort

45

Warum nicht verwenden For Each? Auf diese Weise müssen Sie sich nicht darum kümmern, was die LBound und UBound sind.

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

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

Sie können 'For Each' nicht verwenden, um Array-Zellen direkt zu bearbeiten, da' y' in Ihrem Beispiel eine Kopie der Array-Zelle ist, nicht ihre Referenz. Für die Bearbeitung von Arrays ermöglicht 'For i = LBound (arr) To UBound (arr)', dass man mit 'arr (i)' direkt auf die Zelle verweist und den Zelleninhalt editiert (wie 'arr (i) = Trim (arr (i)) '). –

1

Wahrscheinlich kommt es von VB6. Denn mit Option Base Aussage in VB6, können Sie die untere Grenze von Arrays wie folgt ändern:

Option Base 1 

Auch in VB6, können Sie die untere Grenze eines bestimmten Array wie folgt ändern:

Dim myArray(4 To 42) As String 
1

ich immer For Each verwendet haben ...

16

Es gibt einen guten Grund, nicht

dim arr(10) weist elf Mitglieder des Arrays For i = LBound(arr) To UBound(arr) verwenden, um ist, 10 0 durch (vorausgesetzt, die VB6-Standardoptionsbasis).

Viele VB6-Programmierer gehen davon aus, dass das Array einbasig ist, und verwenden Sie niemals das zugewiesene . Wir können eine potentielle Fehlerquelle entfernen, indem wir For i = 1 To UBound(arr) oder For i = 0 To UBound(arr) verwenden, weil dann klar ist, ob arr(0) verwendet wird.

For each erstellt eine Kopie jedes Array-Elements statt eines Zeigers.

Dies hat zwei Probleme.

  1. Wenn wir versuchen, einem Array-Element einen Wert zuzuweisen, spiegelt es nicht das Original wider. Dieser Code weist der Variablen i den Wert 47 zu, wirkt sich jedoch nicht auf die Elemente aus.

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

  2. Wir wissen nicht, den Index eines Array-Elements in einem for each, und wir sind nicht die Folge von Elementen gewährleistet ist (obwohl es in Ordnung zu sein scheint.)

3

ist möglicherweise nicht immer 0.

Während es in VBScript nicht möglich ist, ein Array zu erstellen, das etwas anderes als eine Untergrenze von 0 hat, ist es immer noch möglich, ein Array von Varianten aus einer COM-Komponente abzurufen ent, die möglicherweise eine andere LBound angegeben haben.

Das sagte ich habe noch nie eine, die so etwas getan hat.

Verwandte Themen