Практическое руководство. Запуск нескольких операторов для каждого элемента в коллекции или массиве
Обновлен: Ноябрь 2007
Конструкция цикла For Each аналогична циклу For...Next, но выполняет блок операторов для каждого элемента коллекции, а не заданное число раз. Цикл For Each... Next использует переменную элемента, которая представляет другой элемент коллекции во время каждого повторения цикла.
Повторение блока операторов для коллекции
Чтобы выполнить группу операторов для каждого элемента коллекции
Определите коллекцию, для которой будет выполняться блок операторов, и используйте цикл Инструкция For Each... Next (Visual Basic) для указания переменной элемента и коллекции.
For Each thisControl As System.Windows.Forms.Control In thisForm.Controls
Если переменная элемента не объявлена вне цикла, можно объявить ее с помощью выражения As как часть оператора For Each.
Visual Basic автоматически подставляет другой элемент коллекции для каждой итерации.
Конструкция завершается 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. Однако, как и в случае с коллекциями, элементы массива можно только считывать, но не изменять.
Чтобы выполнить группу операторов для каждого элемента массива
Используйте оператор For Each, чтобы указать переменную элемента и массив. Не следует заключать имя массива в скобки.
Visual Basic рассматривает массив таким же образом, как он рассматривает коллекцию.
Выполните блок операторов с оператором 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)