2008-08-05 49 views

回答

45

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

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

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

您不能使用For Each来直接编辑数组单元,因为在您的示例中`y`是数组单元的副本,而不是参考。对于数组编辑,`For i = LBound(arr)To UBound(arr)`将允许直接使用`arr(i)`引用单元格并编辑单元格内容(比如`arr(i)= Trim(arr ))`)。 – 2014-05-29 14:20:47

1

可能它来自VB6。因为在VB6 Option Base语句,可以改变下界阵列是这样的:

Option Base 1 

而且在VB6中,你可以改变下界特定阵列的是这样的:

Dim myArray(4 To 42) As String 
1

我一直用于各...

16

有一个很好的理由不要使用For i = LBound(arr) To UBound(arr)

dim arr(10)分配阵列的十名一名成员,从0到10(假设VB6默认选项基础)。

许多VB6程序员都假设该数组是基于一个数组,并且从不使用分配的arr(0)。我们可以通过使用For i = 1 To UBound(arr)For i = 0 To UBound(arr)来消除潜在的错误来源,因为那么清楚是否正在使用arr(0)

For each使每个数组元素的副本,而不是一个指针。

这有两个问题。

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

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

  2. 我们不知道一个数组元素的索引中for each,我们不能保证元素的顺序(尽管它似乎是为了。)

3

LBound可能并不总是0.

虽然无法创建一个数组,但VBScript中的下限不是0,但仍可以从COM组件中检索变体数组可能指定了不同的LBound

这就是说我从来没有遇到过这样的事情。

相关问题