Do...Loop 语句 (Visual Basic)

更新:2007 年 11 月

当某个 Boolean 条件为 True 时,或在该条件变为 True 之前,重复执行某个语句块。

Do { While | Until } condition
    [ statements ]
    [ Exit Do ]
    [ statements ]
Loop
-or-
Do
    [ statements ]
    [ Exit Do ]
    [ statements ]
Loop { While | Until } condition

各部分说明

  • While
    必选项(除非使用了 Until)。重复执行循环,直到 condition 为 False。

  • Until
    必选项(除非使用了 While)。重复执行循环,直到 condition 为 True。

  • condition
    可选项。Boolean 表达式。如果 condition 为 Nothing,Visual Basic 会将其视为 False。

  • statements
    可选项。一条或多条语句,它们在 condition 为 True 时或变为 True 之前重复执行。

  • Exit Do
    可选项。将控制传送到 Do 循环外。

  • Loop
    必选。终止 Do 循环的定义。

备注

如果想重复执行一组语句不定的次数,直到满足了某个条件为止,则可使用 Do...Loop 结构。如果想重复执行语句既定的次数,则 For...Next 语句通常是更好的选择。

Do...Loop 结构在灵活性上比 While...End While 语句 (Visual Basic) 更强,这是因为,它允许您在 condition 停止为 True 或初次变为 True 时选择是否结束循环。它还允许您在循环的开头或结尾测试 condition。

规则

  • **条件的性质。**条件通常通过两个值的比较得到,但也可以是任何计算为 Boolean 数据类型 (Visual Basic) 值(True 或 False)的表达式。这包括已转换为 Boolean 的其他数据类型(如数字类型)的值。

  • **测试条件。**只能在循环的开头或结尾测试 condition 一次。可以使用 While 或 Until 来指定 condition,但不能同时使用两个。

  • **迭代次数。**如果在循环的开头(在 Do 语句中)测试 condition,则循环可能从不会运行一次。如果在循环的结尾(在 Loop 语句中)进行测试,则循环总是会运行至少一次。

  • **嵌套循环。**可以将一个 Do 循环放在另一个同类循环内以嵌套该循环。也可以互相嵌套不同类型的控制结构。有关更多信息,请参见嵌套的控制结构

  • 传送到循环外。Exit 语句 (Visual Basic) 将控制立即传送给 Loop 语句后面的语句。如果检测到使继续迭代不必要或不可能的条件(如错误值或终止请求),则可能需要退出循环。可以在 Do 循环内的任何地方放入任意数量的 Exit Do 语句。通常会在计算某个条件的值后使用 Exit Do,例如在 If...Then...Else 结构中。

无限循环

Exit Do 的一种用途是测试能够导致无限循环(即运行次数非常多甚至无限的循环)的条件。如果检测到此类条件,则可以使用 Exit Do 来跳出循环。否则,循环会继续执行。

在下面的示例中,number 被赋予一个可以导致循环的执行次数超过 2 ^ 31 次的值。If 语句会检查此条件,如果它存在,则退出,从而防止无限循环。

Sub exitDoExample()
    Dim counter As Integer = 0
    Dim number As Integer = 8
    Do Until number = 10
        If number <= 0 Then Exit Do
        number -= 1
        counter += 1
    Loop
    MsgBox("The loop ran " & counter & " times.")
End Sub
说明:

要停止无限循环,请按 Esc 或 Ctrl+Break。

示例

下面的示例阐释嵌套的 Do...Loop 结构,While 和 Until 的用法,以及在循环的开头(Do 语句)和结尾(Loop 语句)进行的测试。

Sub DoExample()
    Dim check As Boolean = True
    Dim counter As Integer = 0
    Do
        Do While counter < 20
            counter += 1
            If counter = 10 Then
                check = False
                Exit Do
            End If
        Loop
    Loop Until check = False
End Sub

在前面的示例中,内层的 Do...Loop 结构循环 10 次,将标志值设置为 False,并使用 Exit Do 语句提前退出循环。外层循环则在检查标志值后立即退出。

请参见

任务

如何:提高循环的性能

概念

循环结构

嵌套的控制结构

参考

For...Next 语句 (Visual Basic)

Boolean 数据类型 (Visual Basic)

Exit 语句 (Visual Basic)

While...End While 语句 (Visual Basic)