Do...Loop 语句 (Visual Basic)
当 Boolean
条件为 True
或在条件变为 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...Next Statement 通常是更好的选择。
您可以使用 While
或 Until
来指定 condition
,但不能同时使用两者。 如果两者均未提供,则循环将继续进行,直到 Exit
传输控制退出循环。
只能在循环的开头或结尾测试 condition
一次。 如果循环开始时(在 Do
语句中)测试 condition
,则循环可能不会运行一次。 如果在循环结束时(在 Loop
语句中)测试,则循环始终运行至少一次。
这种情况通常是由两个值比较导致的,但它可以是计算结果为布尔数据类型 值 (True
或 False
) 的任何表达式。 这包括已转换为 Boolean
的其他数据类型(如数值类型)的值。
可以通过将 1 个循环放入另一个循环来嵌套 Do
循环。 还可以在彼此之间嵌套不同种类的控制结构。 有关详细信息,请参阅嵌套控件结构。
注意
Do...Loop
结构比 While...End While 语句更灵活,因为它可用于决定在 condition
停止 True
或者在第一次变为 True
时结束循环。 它还能够在循环的开头或结尾测试 condition
。
退出 Do
Exit Do 语句可以提供退出 Do…Loop
的替代方法。 Exit Do
立即将控件传递给 Loop
语句后面的语句。
Exit Do
通常在计算某些条件后(例如在结构中 If...Then...Else
)使用。 如果检测到可能导致不必要或无法继续迭代的条件(如错误值或终止请求),则可能需要退出循环。 Exit Do
的一种用途是测试可能导致无限循环的情况,这是可运行很大甚至无限次数的循环。 可以使用 Exit Do
来转义循环。
可以在 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
语句会导致 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