2008-08-05 12 views

ответ

45

Почему не использовать For Each? Таким образом вам не нужно заботиться о том, что такое LBound и UBound.

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

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

Вы не можете использовать `For Every` для непосредственного редактирования ячеек массива, так как` y` в вашем примере является копией ячейки массива, а не ссылкой. Для редактирования массива `For i = LBound (arr) To UBound (arr)` позволит напрямую ссылаться на ячейку с помощью `arr (i)` и редактировать содержимое ячейки (например, `arr (i) = Trim (arr (i)) `). – 2014-05-29 14:20:47

1

Возможно, он исходит от VB6. Потому что с Option Base заявлением в VB6, вы можете изменить нижнюю границу массива, как это:

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.

Хотя невозможно создать массив, который имеет ничего, кроме 0 нижней границы в VBScript, все еще можно получить массив вариантов из COM-компонента который может указать другой LBound.

Это говорит, что я никогда не сталкивался с тем, кто сделал что-то подобное.

 Смежные вопросы

  • Нет связанных вопросов^_^