短路

通过使用 ExitContinue 语句,可以在任何时间点终止或继续任何循环。

退出

你可以通过提前退出来停止任何循环。为此,你可以使用关键字 Exit 以及循环名称。

退出声明
对于 Exit For
每个人 Exit For
做的 Exit Do
Exit While

尽早退出循环是一种提高性能的好方法,只需循环必要的次数即可满足应用程序的需求。下面是一旦找到数字 2,循环将退出的示例。

Dim Numbers As Integer() = {1,2,3,4,5}
Dim SoughtValue As Integer = 2
Dim SoughtIndex
For Each i In Numbers
    If i = 2 Then 
        SoughtIndex = i
        Exit For
    End If
Next
Debug.Print(SoughtIndex)

继续

除了早期退出,你还可以决定是否需要继续下一个循环迭代。使用 Continue 语句可以轻松完成此操作。就像 Exit 一样,它由循环名称继续。

继续声明
对于 Continue For
每个人 Continue For
做的 Continue Do
Continue While

这是一个阻止偶数加到总和中的例子。

Dim Numbers As Integer() = {1,2,3,4,5}
Dim SumOdd As Integer = 0
For Each i In Numbers
    If Numbers(i) \ 2 = 0 Then Continue For
    SumOdd += Numbers(i)
Next

使用建议

有两种替代技术可以代替使用 ExitContinue

你可以声明一个新的布尔变量,将其初始化为一个值并有条件地将其设置为循环内的另一个值; 然后,你可以使用基于该变量的条件语句(例如 If)来避免在后续迭代中执行循环内的语句。

Dim Found As Boolean = False
Dim FoundIndex As Integer
For i As Integer = 0 To N - 1
    If Not Found AndAlso A(i) = SoughtValue Then
        FoundIndex = i
        Found = True
    End If
Next

对这种技术的一个反对意见是它可能效率低下。例如,如果在上面的例子中 N 是 1000000 并且数组 A 的第一个元素等于 SoughtValue,则循环将再迭代 999999 次而不做任何有用的事情。然而,在某些情况下,该技术可以具有更高清晰度的优点。

你可以使用 GoTo 语句跳出循环。请注意,你不能使用 GoTo 跳转循环中。

    Dim FoundIndex As Integer
    For i As Integer = 0 To N - 1
        If A(i) = SoughtValue Then
            FoundIndex = i
            GoTo Found
        End If
    Next
    Debug.Print("Not found")
Found:
    Debug.Print(FoundIndex)

这种技术有时可能是跳出循环并避免在循环自然结束后执行的一个或多个语句的最佳方法。

你应该考虑所有替代方案,并使用最符合你要求的方案,考虑效率,编写代码的速度和可读性(因此可维护性)。

当它是最好的选择时,不要在使用 GoTo 的情况下推迟使用 GoTo