Оператор For... Next (Visual Basic)
Повторяет группу операторов заданное количество раз.
For counter [ As datatype ] = start To end [ Step step ]
[ statements ]
[ Continue For ]
[ statements ]
[ Exit For ]
[ statements ]
Next [ counter ]
Части
Часть |
Описание |
---|---|
counter |
Требуется в операторе For.Числовая переменная.Управляющая переменная цикла.Дополнительные сведения см. в подразделе Аргумент счетчика далее в этом разделе. |
datatype |
Необязательный параметр.Тип данных counter. Дополнительные сведения см. в подразделе Аргумент счетчика далее в этом разделе. |
start |
Обязательное.Числовое выражение.Начальное значение counter. |
end |
Обязательное.Числовое выражение.Конечное значение counter. |
step |
Необязательный параметр.Числовое выражение.Шаг, с которым counter увеличивается при каждом прохождении цикла. |
statements |
Необязательный параметр.Одно или несколько выражений между For и Next, выполняемых указанное число раз. |
Continue For |
Необязательный параметр.Передает управление следующей итерации цикла. |
Exit For |
Необязательный параметр.Передает управление из цикла For. |
Next |
Обязательное.Завершает определение цикла For. |
Примечание |
---|
Ключевое слово To используется в эту инструкцию для определения диапазона счетчика.Можно также использовать ключевое слово в Оператор Select...Case (Visual Basic) и в объявлении массива.Дополнительные сведения об объявлениях массивов см. в разделе Оператор Dim (Visual Basic). |
Простые примеры
Используется структура For…Next, когда требуется выполнить набор выписок задать количество раз.
В следующем примере запускается приложение переменной index со значением 1 и инкрементированы с каждой итерацией цикла, конечный после значение index достигает 5.
For index As Integer = 1 To 5
Debug.Write(index.ToString & " ")
Next
Debug.WriteLine("")
' Output: 1 2 3 4 5
В следующем примере запускается приложение переменной number уменьшается на 2 и 0,25 для каждой итерации цикла, конечный после значение number достигает 0.Аргумент Step-.25 уменьшает значение 0,25 для каждой итерации цикла.
For number As Double = 2 To 0 Step -0.25
Debug.Write(number.ToString & " ")
Next
Debug.WriteLine("")
' Output: 2 1.75 1.5 1.25 1 0.75 0.5 0.25 0
Совет |
---|
Оператор While... End While (Visual Basic) или Оператор Do...Loop (Visual Basic) хорошо работают при неизвестен заранее раз щелкните выписки в цикле.Однако, если предполагается повторить цикл определенное число раз, то лучше использовать цикл For...Next.Число итераций определяется при первом входе в цикл. |
Вложенные циклы.
Циклы For могут вкладываться друг в друга.В следующем примере демонстрируются вложенные структуры For...Next с разными значениями шага.Внешний цикл создает строку для каждой итерации цикла.Внутренний цикл уменьшает переменную счетчика цикла с каждой итерацией цикла.
For indexA = 1 To 3
' Create a new StringBuilder, which is used
' to efficiently build strings.
Dim sb As New System.Text.StringBuilder()
' Append to the StringBuilder every third number
' from 20 to 1 descending.
For indexB = 20 To 1 Step -3
sb.Append(indexB.ToString)
sb.Append(" ")
Next indexB
' Display the line.
Debug.WriteLine(sb.ToString)
Next indexA
' Output:
' 20 17 14 11 8 5 2
' 20 17 14 11 8 5 2
' 20 17 14 11 8 5 2
Если циклы вложения, каждый цикл должны иметь уникальный переменную counter.
Также можно вложить друг в друга различные виды управляющих структур.Для получения дополнительной информации см. Вложенные структуры управления (Visual Basic).
Оставьте для; для
Выписка Exit For сразу отобразится цикл For…Next и управление передач на инструкцию, которая следует за выписка Next.
Оператор Continue For передает управление непосредственно следующей итерации цикла.Для получения дополнительной информации см. Оператор Continue (Visual Basic).
В следующем примере показано использование оператора Continue For и Exit For.
For index As Integer = 1 To 100000
' If index is between 5 and 7, continue
' with the next iteration.
If index >= 5 And index <= 8 Then
Continue For
End If
' Display the index.
Debug.Write(index.ToString & " ")
' If index is 10, exit the loop.
If index = 10 Then
Exit For
End If
Next
Debug.WriteLine("")
' Output: 1 2 3 4 9 10
Любое число операторов Exit For можно разместить в цикле For…Next.При использовании вложенных циклов For…Next конструкция Exit For закрывает самый внутренний цикл и передает управление следующему уровню вложения.
Exit For часто используется после оценке некоторое условие (например, в структуре If…Then…Else ).Можно использовать Exit For при следующих условиях:
Продолжать выполнение итераций не нужно или невозможно.Ошибочное значение или завершения запроса можно создать это условие.
Выписка Try…Catch…Finally перехватывает исключение.Можно использовать Exit For в конце блока Finally.
Имеется бесконечный цикл, цикл, может выполнять большой или даже бесконечный количество раз.При обнаружении таких условий для выхода из цикла можно использовать Exit For.Дополнительные сведения см. в разделе Оператор Do...Loop (Visual Basic).
Техническая реализация
При начале цикла For...Next Visual Basic оценивает start, end и step.Visual Basic возвращает эти значения только в настоящее время, а затем присвоить start на counter.Прежде чем блок выписки выполняется Visual Basic сравниваются counter значение end.Если counter уже больше, чем значение end (или step ), если небольшое отрицательное, цикл For для выполнения и передаче элемента управления инструкцию, которая следует за выписка Next.В противном случае выполняется блока выписки.
Каждый раз при обнаружении оператора Next Visual Basic увеличивает counter на step и возвращается к оператору For.После этого сравниваются counter и end, и в зависимости от результата происходит либо выполнение блока, либо выход из цикла.Этот процесс продолжается до тех пор, пока counter не превысит end, или не встретится оператор Exit For.
Цикл не останавливается до тех пор, пока counter не будет передачи end.Если counter равен end, то цикл продолжается.Сравнением, определяющим, следует ли выполнять блок, является counter <= end для положительного step и counter >= end для отрицательного step.
При изменении значения counter, внутри цикла, код может быть сложнее для чтения и отладки.Изменение значения start, end или step не влияют на значения, которые были определены при итерации цикла сначала был введен.
Если вы поместите циклы, компилятор сигнализирует об ошибке при обнаружении выписка Next внешнего уровень вложенности перед выпиской Next внутреннего уровня.При этом компилятор может обнаружить эту ошибку перекрывания только в том случае, если в каждой инструкции Next задан counter.
Аргумент шага
Значение step может быть либо положительным, либо отрицательным.Этот параметр задает цикл обработки согласно следующей таблице.
Значение шага |
Цикл выполняется, если |
---|---|
Положительное или нулевое |
counter <= end |
Отрицательное число |
counter >= end |
Значение по умолчанию для типа step равно 1.
Аргумент счетчика
В следующей таблице показаны определяет, является ли counter новую локальную переменную, которая относится ко всему циклу For…Next.Это определение зависит от наличия datatype и counter, определено ли уже.
У datatype ? |
counter уже определено? |
Результат (определяет, является ли counter новую локальную переменную, которая относится ко всему цикл For...Next ) |
---|---|---|
Нет |
Да |
Нет, поскольку класс counter уже задано.Если область counter не является в процедуру, возникает предупреждение во время компиляции. |
Нет |
Нет |
Да.Тип данных выводится из start, end, step и выражений.Дополнительные сведения об определении типа см. в разделах Оператор Option Infer и Вывод локального типа (Visual Basic). |
Да |
Да |
Да, но только если существующей переменной counter определяется вне процедуры.Эта переменная остается отдельно.Если область существующей локальной переменной counter в процедуре, происходит ошибка времени компиляции. |
Да |
Нет |
Да. |
Тип данных counter указывает тип итерации, которая должна быть одним из следующих типов:
Byte, SByte, UShort, Short, UInteger, Integer, ULong, Long, Decimal, Single или Double.
Перечисление объявляется с использованием Оператор Enum (Visual Basic).
Объект Object.
Тип T, имеющий следующие операторы, где тип, который может использоваться в выраженииBoolean — B .
Public Shared Operator >= (op1 As T, op2 As T) As B
Public Shared Operator <= (op1 As T, op2 As T) As B
Public Shared Operator - (op1 As T, op2 As T) As T
Public Shared Operator + (op1 As T, op2 As T) As T
При необходимости можно определить переменную counter в инструкцию Next.Этот синтаксис повышает удобочитаемость программы, особенно если количеством вложенных циклов For.Необходимо указать переменную, которая отображается в соответствующем оператора For.
Выражения start, end и step могут быть приведены к любому большему по разрядности типу, чем тип counter.Если используется пользовательский тип для counter, укажите оператор преобразования CType для преобразования типов start, end или step в тип counter.
Пример
В следующем примере показано удаление всех элементов из универсального списка.Вместо Оператор For Each... Next (Visual Basic), пример показывает оператора For…Next, выполняются в порядке убывания.В примере этот метод используется, поскольку метод removeAt приводит к созданию элементов после удаленного элемента имеет меньшее значение индекса.
Dim lst As New List(Of Integer) From {10, 20, 30, 40}
For index As Integer = lst.Count - 1 To 0 Step -1
lst.RemoveAt(index)
Next
Debug.WriteLine(lst.Count.ToString)
' Output: 0
Следующий пример выполняет цикл по перечисление, объявлено с помощью Оператор Enum (Visual Basic).
Public Enum Mammals
Buffalo
Gazelle
Mongoose
Rhinoceros
Whale
End Enum
Public Sub ListSomeMammals()
For mammal As Mammals = Mammals.Gazelle To Mammals.Rhinoceros
Debug.Write(mammal.ToString & " ")
Next
Debug.WriteLine("")
' Output: Gazelle Mongoose Rhinoceros
End Sub
В следующем примере параметры оператора используют класс, имеющий перегрузки оператора для +-, >=и <= операторов.
Private Class Distance
Public Property Number() As Double
Public Sub New(ByVal number As Double)
Me.Number = number
End Sub
' Define operator overloads to support For...Next statements.
Public Shared Operator +(ByVal op1 As Distance, ByVal op2 As Distance) As Distance
Return New Distance(op1.Number + op2.Number)
End Operator
Public Shared Operator -(ByVal op1 As Distance, ByVal op2 As Distance) As Distance
Return New Distance(op1.Number - op2.Number)
End Operator
Public Shared Operator >=(ByVal op1 As Distance, ByVal op2 As Distance) As Boolean
Return (op1.Number >= op2.Number)
End Operator
Public Shared Operator <=(ByVal op1 As Distance, ByVal op2 As Distance) As Boolean
Return (op1.Number <= op2.Number)
End Operator
End Class
Public Sub ListDistances()
Dim distFrom As New Distance(10)
Dim distTo As New Distance(25)
Dim distStep As New Distance(4)
For dist As Distance = distFrom To distTo Step distStep
Debug.Write(dist.Number.ToString & " ")
Next
Debug.WriteLine("")
' Output: 10 14 18 22
End Sub
См. также
Ссылки
Оператор While... End While (Visual Basic)
Оператор Do...Loop (Visual Basic)
Основные понятия
Циклические структуры (Visual Basic)
Вложенные структуры управления (Visual Basic)