当条件为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 ,则无法提供。 重复循环,直到 condition 是 False 。 |
Until |
如果使用 While ,则无法提供。 重复循环,直到 condition 是 True 。 |
condition |
可选。
Boolean 表达。
Nothing 如果是condition ,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
比 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...Loop
, Peek 该方法 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