Поделиться через


Практическое руководство. Запуск нескольких операторов для каждого элемента в коллекции или массиве

Обновлен: Ноябрь 2007

Конструкция цикла For Each аналогична циклу For...Next, но выполняет блок операторов для каждого элемента коллекции, а не заданное число раз. Цикл For Each... Next использует переменную элемента, которая представляет другой элемент коллекции во время каждого повторения цикла.

Повторение блока операторов для коллекции

Чтобы выполнить группу операторов для каждого элемента коллекции

  1. Определите коллекцию, для которой будет выполняться блок операторов, и используйте цикл Инструкция For Each... Next (Visual Basic) для указания переменной элемента и коллекции.

    For Each thisControl As System.Windows.Forms.Control In thisForm.Controls
    

    Если переменная элемента не объявлена вне цикла, можно объявить ее с помощью выражения As как часть оператора For Each.

    Visual Basic автоматически подставляет другой элемент коллекции для каждой итерации.

  2. Конструкция завершается For Each... Next оператором Next, который выполняется после выхода из цикла. Можно указать переменную элемента в операторе Next.

    Sub lightBlueBackground(ByVal thisForm As System.Windows.Forms.Form)
        For Each thisControl As System.Windows.Forms.Control In thisForm.Controls
            thisControl.BackColor = System.Drawing.Color.LightBlue
        Next thisControl 
    End Sub
    

    Можно считывать элементы коллекции, но не добавлять, удалять или изменять их. Тем не менее, если элемент относится к ссылочному типу, можно обратиться к нему и задать его члены. Поскольку каждый элемент Control является ссылочным типом, код в предыдущем примере может изменить его свойство BackColor.

Повторение блока операторов для массива

Также можно выполнить итерацию массива с помощью цикла For Each... Next. Однако, как и в случае с коллекциями, элементы массива можно только считывать, но не изменять.

Чтобы выполнить группу операторов для каждого элемента массива

  1. Используйте оператор For Each, чтобы указать переменную элемента и массив. Не следует заключать имя массива в скобки.

    Visual Basic рассматривает массив таким же образом, как он рассматривает коллекцию.

  2. Выполните блок операторов с оператором Next. Можно указать переменную элемента в операторе Next.

    Следующая процедура предназначена для получения суммы элементов массива и обнуления каждого элемента:

    Function sumAndReset(ByRef numbers() As Integer) As Integer
        Dim sum As Integer = 0
        For Each elt As Integer In numbers 
            sum += elt
            ' The following statement works only on the local copy
            ' of the array, not on the original array.
            elt = 0
        Next elt
        Return sum
    End Function
    

    Задача суммирования выполняется надлежащим образом, поскольку она зависит только от чтения элементов. Однако предполагаемое обнуление не выполняется, так как обнуляются только локальные копии каждого элемента, а исходные элементы в настоящем массиве остаются неизменными.

См. также

Задачи

Практическое руководство. Передача управления за пределы структуры управления

Практическое руководство. Повторное выполнение нескольких инструкций

Практическое руководство. Улучшение быстродействия цикла

Практическое руководство. Переход к следующей итерации цикла

Основные понятия

Структуры решений

Циклические структуры

Другие структуры управления

Вложенные структуры управления

Ссылки

Инструкция For... Next (Visual Basic)

Другие ресурсы

Управление ходом выполнения в Visual Basic