做。。。循环语句 (Visual Basic)

当条件为True或直到条件变为True时重复语句Boolean块。

语法

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 ,则无法提供。 重复循环,直到 conditionFalse
Until 如果使用 While ,则无法提供。 重复循环,直到 conditionTrue
condition 可选。 Boolean 表达。 Nothing如果是condition,Visual Basic 将它视为 False
statements 可选。 一个或多个重复的语句或直到该 condition 语句是 True
Continue Do 可选。 将控制权传输到循环的 Do 下一次迭代。
Exit Do 可选。 将控制从 Do 循环转移出去。
Loop 必填。 终止Do循环的定义。

注解

Do...Loop如果要无限期重复一组语句,直到满足条件,请使用结构。 如果要重复语句的次数,则 For...下一个语句 通常是更好的选择。

可以使用任一或WhileUntil两者来指定,但不能同时指定condition两者。 如果两者均未提供,则循环会一直 Exit 持续到传输控制退出循环。

只能在循环的开头或末尾测试 condition 一次。 如果在循环开始时进行测试 condition (在语句中 Do ),则循环甚至可能不会运行一次。 如果在循环末尾进行测试(在语句中 Loop ),循环始终至少运行一次。

该条件通常是两个值的比较结果,但它可以是计算结果为 布尔数据类型 值(TrueFalse) 的任何表达式。 这包括已转换为 Boolean其他数据类型的值,例如数值类型。

可以通过将一个循环置于另一个循环中来嵌套 Do 循环。 还可以相互嵌套不同类型的控件结构。 有关详细信息,请参阅 嵌套控件结构

注释

结构Do...Loop比 While 更灵活...End While 语句,因为它使你能够决定是停止True循环时condition还是第一次变为True循环时结束循环。 它还允许你在循环的开头或末尾进行测试 condition

退出作

Exit Do 语句可以提供退出 a 的Do…Loop替代方法。 Exit Do 将控制权立即传输到语句后面的 Loop 语句。

Exit Do 通常在评估某些条件后使用,例如在结构 If...Then...Else 中。 如果检测到导致不必要或不可能继续迭代的条件(例如错误值或终止请求),则可能需要退出循环。 其中 Exit Do 一个用途是测试可能导致 无限循环的条件,这是一个循环,可以运行大量甚至无限次数的循环。 可用于 Exit Do 转义循环。

可以在 a Do…Loop. 中的任何位置包含任意数量的Exit Do语句。

在嵌套 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

在以下示例中,当index变量大于 100 时停止condition循环。 但是,当 If 索引变量大于 10 时,循环中的语句会导致 Exit Do 该语句停止循环。

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...LoopPeek 该方法 StreamReader 确定是否有任何其他字符。

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

另请参阅