40

在下面的代码中

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

问 using 有什么意义LBound?当然,这始终是 0。

4

6 回答 6

61

为什么不使用For Each?这样你就不需要关心LBoundandUBound是什么了。

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)分配数组的 11 个成员,从 0 到 10(假设 VB6 默认选项基)。

许多 VB6 程序员假定数组是基于 1 的,并且从不使用分配的arr(0). For i = 1 To UBound(arr)我们可以通过使用or来消除潜在的 bug 来源For i = 0 To UBound(arr),因为这样就很清楚是否arr(0)正在使用。

For each复制每个数组元素,而不是指针。

这有两个问题。

  1. 当我们尝试为数组元素赋值时,它不会反映在原始元素上。此代码将值 47 分配给变量i,但不影响 的元素arr

    arr = 数组(3,4,8)
    对于 arr 中的每个 i
         我 = 47
    接下来我
    Response.Write arr(0) ' - 返回 3,而不是 47
  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 回答
0

这是我的方法:

dim arrFormaA(15)
arrFormaA( 0 ) = "formaA_01.txt"
arrFormaA( 1 ) = "formaA_02.txt"
arrFormaA( 2 ) = "formaA_03.txt"
arrFormaA( 3 ) = "formaA_04.txt"
arrFormaA( 4 ) = "formaA_05.txt"
arrFormaA( 5 ) = "formaA_06.txt"
arrFormaA( 6 ) = "formaA_07.txt"
arrFormaA( 7 ) = "formaA_08.txt"
arrFormaA( 8 ) = "formaA_09.txt"
arrFormaA( 9 ) = "formaA_10.txt"
arrFormaA( 10 ) = "formaA_11.txt"
arrFormaA( 11 ) = "formaA_12.txt"
arrFormaA( 12 ) = "formaA_13.txt"
arrFormaA( 13 ) = "formaA_14.txt"
arrFormaA( 14 ) = "formaA_15.txt"

Wscript.echo(UBound(arrFormaA))
''displays "15"

For i = 0 To UBound(arrFormaA)-1
    Wscript.echo(arrFormaA(i))
Next

希望能帮助到你。

于 2019-06-30T02:32:29.950 回答