While...End While 语句 (Visual Basic)
只要给定条件为 True 就运行一系列语句。
While condition
[ statements ]
[ Continue While ]
[ statements ]
[ Exit While ]
[ statements ]
End While
部件
术语 |
定义 |
condition |
必需。 Boolean 表达式。 如果 condition 为 Nothing,Visual Basic 会将其视为 False。 |
statements |
可选。 跟在 While 后面的一个或多个语句,这些语句将在每次 condition 为 True 时运行。 |
Continue While |
可选。 为 While 的下一次迭代传输控件块。 |
Exit While |
可选。 将控制权传送到 While 块外部。 |
End While |
必需。 结束 While 块的定义。 |
备注
如果要重复一组语句无限次数,请使用 While...End While 结构,只要条件一直为 True。 如果想要更灵活地选择在何处测试条件以及针对什么结果进行测试,您可能宁愿使用 Do...Loop 语句 (Visual Basic)。 如果想要重复语句一定次数,则 For...Next 语句 (Visual Basic) 通常是较好的选择。
备注
While 关键字还在 Do...Loop 语句 (Visual Basic)、Skip While 子句 (Visual Basic) 和 Take While 子句 (Visual Basic) 中使用。
如果 condition 为 True,则所有 statements 将运行,直至遇到 End While 语句。 然后控件回 While 语句,并且,condition 再次检查。 如果 condition 仍为 True,则重复上面的过程。 如果是 False,控件传递给遵循 End While 条语句。
在启动循环之前,While 语句始终检查该条件。 在条件一直为 True 时循环会继续下去。 如果 condition 是 False,在首次进入循环时,它甚至一次不会运行。
condition 通常由两个值的比较,但是,它可以是计算结果为 Boolean 数据类型 (Visual Basic) 值的表达式(True 或 False)。 此表达式可以包含其他数据类型的值,如数值类型,被转换为 Boolean。
可以将一个循环放在另一个循环内以嵌套 While 循环。 您还可以将多个不同类型的控制结构嵌套在一个结构中。 有关更多信息,请参见 嵌套的控件结构 (Visual Basic)。
退出,while
退出,while 语句可以提供了另一种 While 退出循环。 立即Exit While 到遵循 End While 条语句传输控件。
通常使用 Exit While,在某些条件计算后(例如,在 If...Then...Else 结构)。 如果检测到使继续迭代不必要或不可能的条件(如错误值或终止请求),则可能需要退出循环。 可以使用 Exit While,则测试可能会导致无限 循环,该循环可以运行非常甚至无限次数的条件时。 然后可以使用 Exit While 退出循环。
可以在 While 循环的任意位置放置任意数量的 Exit While 语句。
当在嵌套的 While 循环内使用时,Exit While 会将控制权转移出最内层的循环,并交给下一层级别较高的嵌套。
对于循环的下一次迭代的直接 Continue While 语句发送控件。 有关更多信息,请参见 Continue 语句 (Visual Basic)。
示例
在下面的示例中,循环中的语句继续运行,直到 index 变量大于 10。
Dim index As Integer = 0
While index <= 10
Debug.Write(index.ToString & " ")
index += 1
End While
Debug.WriteLine("")
' Output: 0 1 2 3 4 5 6 7 8 9 10
下面的示例阐释了 Continue While and Exit While 语句的用法。
Dim index As Integer = 0
While index < 100000
index += 1
' If index is between 5 and 7, continue
' with the next iteration.
If index >= 5 And index <= 8 Then
Continue While
End If
' Display the index.
Debug.Write(index.ToString & " ")
' If index is 10, exit the loop.
If index = 10 Then
Exit While
End If
End While
Debug.WriteLine("")
' Output: 1 2 3 4 9 10
下面的示例读取文本文件中的所有行。 OpenText 方法打开文件,并返回读取字符的 StreamReader。 在 While 情况,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)
While sr.Peek() >= 0
Debug.WriteLine(sr.ReadLine())
End While
sr.Close()
End If
End Sub