40

以下のコードで

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

を使用して尋ねるポイントは何LBoundですか? 確かにそれは常に 0 です。

4

6 に答える 6

61

なぜ使用しないのFor Eachですか?LBoundそうすれば、 andが何であるかを気にする必要はありませんUBound

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

For Each y In x
    z = DoSomethingWith(y)
Next
于 2008-08-05T14:36:12.693 に答える
19

使用しない正当な理由があるFor i = LBound(arr) To UBound(arr)

dim arr(10)配列の 0 から 10 までの 11 個のメンバーを割り当てます (VB6 の既定のオプション ベースを想定)。

多くの VB6 プログラマは、配列が 1 ベースであると想定しており、割り当てられarr(0)た . For i = 1 To UBound(arr)またはFor i = 0 To UBound(arr)を使用することで潜在的なバグの原因を取り除くことができarr(0)ます。

For eachポインターではなく、各配列要素のコピーを作成します。

これには 2 つの問題があります。

  1. 配列要素に値を割り当てようとすると、元の値に反映されません。このコードは変数 に値 47 を割り当てますがi、 の要素には影響しませんarr

    arr = 配列 (3,4,8)
    arr の各 i について
         私は= 47
    次は
    Response.Write arr(0) '- 47 ではなく 3 を返します
  2. の配列要素のインデックスがわからずfor each、要素の順序が保証されていません (順序どおりに見えますが)。

于 2008-09-23T15:24:11.637 に答える
4

LBound常に 0 になるとは限りません。

VBScript で 0 下限以外のものを持つ配列を作成することはできませんが、異なるLBound.

そうは言っても、そのようなことをした人に出会ったことはありません。

于 2008-09-24T18:24:40.273 に答える
2

おそらくVB6から来ています。VB6のOption Baseステートメントを使用すると、配列の下限を次のように変更できるためです。

Option Base 1

また、VB6 では、次のように特定の配列の下限を変更できます。

Dim myArray(4 To 42) As String
于 2008-08-05T14:24:13.653 に答える
1

私は常に For Each ループを使用してきました。

于 2008-08-12T14:34:32.560 に答える