在下面的代码中
1
| For i = LBound(arr) To UBound(arr) |
问使用LBound有什么意义? 肯定总是0。
为什么不使用For Each?这样,您无需关心LBound和UBound是什么。
1 2 3 4 5 6
| Dim x, y, z
x = Array(1, 2, 3)
For Each y In x
z = DoSomethingWith(y)
Next |
有充分的理由不使用For i = LBound(arr) To UBound(arr)
dim arr(10)分配数组的11个成员(0到10)(假设VB6默认选项库)。
许多VB6程序员认为数组是基于1的,并且从不使用分配的arr(0)。我们可以使用For i = 1 To UBound(arr)或For i = 0 To UBound(arr)消除潜在的bug来源,因为很明显是否正在使用arr(0)。
For Each复制每个数组元素,而不是指针。
这有两个问题。
当我们尝试为数组元素分配值时,它不会影响原始值。该代码为变量i分配了47值,但不影响arr的元素。
1 2 3 4 5
| arr = Array(3,4,8)
for each i in arr
i = 47
next i
Response.Write arr(0) '- returns 3, not 47 |
我们不知道For Each中数组元素的索引,也不能保证元素的顺序(尽管看起来是有序的。)
LBound可能不总是为0。
尽管不可能在VBScript中创建除0下界以外的任何其他内容的数组,但仍然可以从COM组件中检索可能已指定其他LBound的变体数组。
那就是说我从来没有遇到过做过这样的事情的人。
可能来自VB6。因为使用VB6中的Option Base语句,您可以像这样更改数组的下限:
同样在VB6中,您可以像这样更改特定数组的下限:
1
| Dim myArray(4 To 42) As String |
我一直都用For Each ...
这是我的方法:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| 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 |
希望能帮助到你。