Frage

Im Code unten

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

Was bringt es, nach using zu fragen? LBound?Sicherlich ist das immer 0.

War es hilfreich?

Lösung

Warum nicht verwenden? For Each?Auf diese Weise müssen Sie sich nicht darum kümmern, was das ist LBound Und UBound Sind.

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

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

Andere Tipps

Dafür gibt es einen guten Grund NICHT NUTZEN For i = LBound(arr) To UBound(arr)

dim arr(10) Weist elf Mitglieder des Arrays zu, 0 bis 10 (unter der Annahme der VB6-Standardoptionsbasis).

Viele VB6-Programmierer gehen davon aus, dass das Array einsbasiert ist, und verwenden niemals das zugewiesene Array arr(0).Durch die Verwendung können wir eine potenzielle Fehlerquelle beseitigen For i = 1 To UBound(arr) oder For i = 0 To UBound(arr), denn dann ist klar, ob arr(0) wird benutzt.

For each Erstellt eine Kopie jedes Array-Elements und keinen Zeiger.

Dies hat zwei Probleme.

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

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

  2. Wir kennen den Index eines Array-Elements in a nicht for each, und wir können die Reihenfolge der Elemente nicht garantieren (obwohl sie in Ordnung zu sein scheint).

LBound 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 dennoch möglich, ein Array von Varianten von einer COM-Komponente abzurufen, die möglicherweise eine andere angegeben hat LBound.

Allerdings ist mir noch nie jemand begegnet, der so etwas getan hat.

Wahrscheinlich kommt es von VB6.Denn mit Optionsbasis Anweisung 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 Arrays wie folgt ändern:

Dim myArray(4 To 42) As String

Ich habe immer For Each verwendet ...

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top