Оператор 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

См. также