Оператор Do...Loop (Visual Basic)Do...Loop Statement (Visual Basic)

Повторяет блок инструкций, пока Boolean условие находится в состоянии или до тех пор, пока условие не True станет True.Repeats a block of statements while a Boolean condition is True or until the condition becomes True.

СинтаксисSyntax

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  

ЧастиParts

ТерминTerm ОпределениеDefinition
Do Обязательный.Required. Запускает определение Do цикла.Starts the definition of the Do loop.
While Является обязательным, если используется параметр Until.Required unless Until is used. Повторите цикл, пока condition не Falseбудет.Repeat the loop until condition is False.
Until Является обязательным, если используется параметр While.Required unless While is used. Повторите цикл, пока condition не Trueбудет.Repeat the loop until condition is True.
condition Необязательный параметр.Optional. Booleanвыражение.Boolean expression. Если condition имеет Nothingзначение, Visual Basic обрабатывает его Falseкак.If condition is Nothing, Visual Basic treats it as False.
statements Необязательный параметр.Optional. Одна или несколько инструкций, повторяемых в, или до, condition имеют True.One or more statements that are repeated while, or until, condition is True.
Continue Do Необязательный параметр.Optional. Передает управление следующей итерации Do цикла.Transfers control to the next iteration of the Do loop.
Exit Do Необязательный параметр.Optional. Передает управление за пределы Do цикла.Transfers control out of the Do loop.
Loop Обязательный.Required. Завершает определение Do цикла.Terminates the definition of the Do loop.

ПримечанияRemarks

Do...Loop Используйте структуру, если нужно повторить набор инструкций неопределенное число раз, пока не будет удовлетворено условие.Use a Do...Loop structure when you want to repeat a set of statements an indefinite number of times, until a condition is satisfied. Если нужно повторить инструкции заданное число раз, то для... Обычно лучше подходит следующий оператор.If you want to repeat the statements a set number of times, the For...Next Statement is usually a better choice.

Можно использовать либо While Until , либо, чтобы conditionуказать, но не оба.You can use either While or Until to specify condition, but not both.

Тест condition можно выполнять только один раз, в начале или в конце цикла.You can test condition only one time, at either the start or the end of the loop. Если проверка condition выполняется в начале цикла ( Do в операторе), цикл может не выполняться даже один раз.If you test condition at the start of the loop (in the Do statement), the loop might not run even one time. Если протестировать в конце цикла (в Loop операторе), цикл всегда выполняется по крайней мере один раз.If you test at the end of the loop (in the Loop statement), the loop always runs at least one time.

Условие обычно является результатом сравнения двух значений, но может быть любым выражением, результатом вычисления которого является логическое значение типа данных (True или False).The condition usually results from a comparison of two values, but it can be any expression that evaluates to a Boolean Data Type value (True or False). Сюда относятся значения других типов данных, например числовые типы, которые были преобразованы в Boolean.This includes values of other data types, such as numeric types, that have been converted to Boolean.

Можно вложить Do циклы, поместив один цикл в другой.You can nest Do loops by putting one loop within another. Можно также вкладывать различные виды управляющих структур друг в друга.You can also nest different kinds of control structures within each other. Дополнительные сведения см. в разделе вложенные структуры управления.For more information, see Nested Control Structures.

Примечание

Эта Do...Loop структура обеспечивает большую гибкость, чем while... Оператор End While , так как он позволяет решить, следует ли завершать цикл condition при остановке True или при первом преобразовании True.The Do...Loop structure gives you more flexibility than the While...End While Statement because it enables you to decide whether to end the loop when condition stops being True or when it first becomes True. Он также позволяет тестироваться condition как в начале, так и в конце цикла.It also enables you to test condition at either the start or the end of the loop.

ВыйтиExit Do

Оператор Exit Do может предоставить альтернативный способ выхода Do…Loopиз.The Exit Do statement can provide an alternative way to exit a Do…Loop. Exit Doнемедленно передает управление оператору, следующему за Loop оператором.Exit Do transfers control immediately to the statement that follows the Loop statement.

Exit Doчасто используется после вычисления некоторого условия, например в If...Then...Else структуре.Exit Do is often used after some condition is evaluated, for example in an If...Then...Else structure. Может потребоваться выйти из цикла, если обнаруживается условие, которое делает ненужным или невозможным продолжение итераций, например ошибочное значение или запрос на завершение.You might want to exit a loop if you detect a condition that makes it unnecessary or impossible to continue iterating, such as an erroneous value or a termination request. Одно из Exit Do них — проверка на наличие условия, которое может вызвать бесконечный цикл, то есть цикл, который может выполнять большое или даже бесконечное число раз.One use of Exit Do is to test for a condition that could cause an endless loop, which is a loop that could run a large or even infinite number of times. Для экранирования Exit Do цикла можно использовать.You can use Exit Do to escape the loop.

В можно включить любое количество Exit Do операторов в любом месте. Do…LoopYou can include any number of Exit Do statements anywhere in a Do…Loop.

При использовании внутри вложенных Do Exit Do циклов передает управление за пределы самого внутреннего цикла и в следующий более высокий уровень вложенности.When used within nested Do loops, Exit Do transfers control out of the innermost loop and into the next higher level of nesting.

ПримерExample

В следующем примере операторы в цикле продолжают выполняться до тех пор, пока index переменная не будет больше 10.In the following example, the statements in the loop continue to run until the index variable is greater than 10. Until Предложение находится в конце цикла.The Until clause is at the end of the loop.

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 

ПримерExample

В следующем примере вместо While Until предложения используется предложение, которое проверяется в condition начале цикла, а не в конце.The following example uses a While clause instead of an Until clause, and condition is tested at the start of the loop instead of at the end.

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 

ПримерExample

В следующем примере останавливается цикл condition , index если переменная больше 100.In the following example, condition stops the loop when the index variable is greater than 100. Однако инструкция в цикле Exit Do приводит к остановке цикла, если переменная индекса больше 10. IfThe If statement in the loop, however, causes the Exit Do statement to stop the loop when the index variable is greater than 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 

ПримерExample

В следующем примере считываются все строки в текстовом файле.The following example reads all lines in a text file. Метод открывает файл и возвращает объект StreamReader , считывающий символы. OpenTextThe OpenText method opens the file and returns a StreamReader that reads the characters. В условии Peek методStreamReader определяет наличие дополнительных символов. Do...LoopIn the Do...Loop condition, the Peek method of the StreamReader determines whether there are any additional characters.

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

См. такжеSee also