短路

通過使用 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