Оператор Do...Loop (Visual Basic)
Повторяет блок инструкций во время выполнения условия True
или до тех пор, пока Boolean
условие не станетTrue
.
Синтаксис
Do [ { While | Until } condition ]
[ statements ]
[ Continue Do ]
[ statements ]
[ Exit Do ]
[ statements ]
Loop
' -or-
Do
[ statements ]
[ Continue Do ]
[ statements ]
[ Exit Do ]
[ statements ]
Loop [ { While | Until } condition ]
Детали
Термин | Определение |
---|---|
Do |
Обязательный. Запускает определение Do цикла. |
While |
Не удается предоставить, если Until используется. Повторите цикл до тех пор, пока condition не будет False . |
Until |
Не удается предоставить, если While используется. Повторите цикл до тех пор, пока condition не будет True . |
condition |
Необязательно. Boolean Выражение. Если condition это Nothing так, Visual Basic обрабатывает его как False . |
statements |
Необязательно. Одно или несколько операторов, повторяющихся в то время или пока, condition — это True . |
Continue Do |
Необязательно. Передает элемент управления в следующую итерацию Do цикла. |
Exit Do |
Необязательно. Передает элемент управления из Do цикла. |
Loop |
Обязательный. Завершает определение Do цикла. |
Замечания
Do...Loop
Используйте структуру, если требуется повторить набор операторов неограниченное количество раз, пока условие не будет удовлетворено. Если вы хотите повторить инструкции, заданное число раз, значение For... Следующая инструкция обычно является лучшим выбором.
Вы можете использовать любой из While
этих вариантов или Until
указать condition
, но не оба. Если вы не даете никаких данных, цикл продолжается до тех пор, пока Exit
не будет передан элемент управления передачи из цикла.
Тестировать condition
можно только один раз, в начале или конце цикла. При тестировании condition
в начале цикла (в Do
инструкции) цикл может не выполняться даже один раз. При тестировании в конце цикла (в Loop
инструкции) цикл всегда выполняется по крайней мере один раз.
Условие обычно приводит к сравнению двух значений, но это может быть любое выражение, которое вычисляет логическое значение типа данных (True
или False
). Сюда входят значения других типов данных, таких как числовые типы, в которые были преобразованы Boolean
.
Вы можете вложить Do
циклы, поместив один цикл в другой. Вы также можете вложить различные типы структур управления друг в друга. Дополнительные сведения см. в разделе "Вложенные структуры управления".
Примечание.
Структура Do...Loop
обеспечивает большую гибкость, чем в то время... Оператор End While, так как он позволяет решить, следует ли завершить цикл, когда перестает быть True
или когда condition
он сначала становитсяTrue
. Он также позволяет тестировать condition
в начале или конце цикла.
Выход из Do
Оператор Exit Do может предоставить альтернативный способ выхода Do…Loop
. Exit Do
передает управление немедленно инструкции, следующей за инструкцией Loop
.
Exit Do
часто используется после оценки некоторых условий If...Then...Else
, например в структуре. Может потребоваться выйти из цикла, если вы обнаружите условие, которое делает его ненужным или невозможным для продолжения итерации, например ошибочное значение или запрос на завершение. Одним из способов Exit Do
является проверка условия, которая может привести к бесконечному циклу, который может выполнять большой или даже бесконечное количество раз. Можно использовать Exit Do
для escape-цикла.
Вы можете включить любое количество Exit Do
операторов в Do…Loop
любом месте.
При использовании в вложенных Do
циклах Exit Do
передает управление из самого внутреннего цикла и в следующий более высокий уровень вложения.
Пример 1
В следующем примере операторы в цикле продолжают выполняться до тех пор, пока index
переменная не превышает 10. Предложение Until
находится в конце цикла.
Dim index As Integer = 0
Do
Debug.Write(index.ToString & " ")
index += 1
Loop Until index > 10
Debug.WriteLine("")
' Output: 0 1 2 3 4 5 6 7 8 9 10
Пример 2
В следующем примере используется While
предложение вместо Until
предложения и condition
тестируется в начале цикла, а не в конце.
Dim index As Integer = 0
Do While index <= 10
Debug.Write(index.ToString & " ")
index += 1
Loop
Debug.WriteLine("")
' Output: 0 1 2 3 4 5 6 7 8 9 10
Пример 3
В следующем примере останавливает цикл, condition
если index
переменная превышает 100. Однако оператор If
в цикле приводит Exit Do
к остановке цикла, когда переменная индекса превышает 10.
Dim index As Integer = 0
Do While index <= 100
If index > 10 Then
Exit Do
End If
Debug.Write(index.ToString & " ")
index += 1
Loop
Debug.WriteLine("")
' Output: 0 1 2 3 4 5 6 7 8 9 10
Пример 4
В следующем примере считываются все строки в текстовом файле. Метод OpenText открывает файл и возвращает StreamReader символы, которые считывают символы. Do...Loop
В условии метод StreamReader
определяет наличие Peek дополнительных символов.
Private Sub ShowText(ByVal textFilePath As String)
If System.IO.File.Exists(textFilePath) = False Then
Debug.WriteLine("File Not Found: " & textFilePath)
Else
Dim sr As System.IO.StreamReader = System.IO.File.OpenText(textFilePath)
Do While sr.Peek() >= 0
Debug.WriteLine(sr.ReadLine())
Loop
sr.Close()
End If
End Sub