共用方式為


Do...Loop 陳述式 (Visual Basic)

更新:2007 年 11 月

當 Boolean 條件為 True 時重複陳述式區塊,或是重複陳述式區塊直到條件變成 True 為止。

 Do { While | Until } condition     [ statements ]     [ Exit Do ]     [ statements ] Loop -or- Do     [ statements ]     [ Exit Do ]     [ statements ] Loop { While | Until } condition

參數

  • While
    除非使用 Until,否則為必要項。重複迴圈直到 condition 為 False 為止。

  • Until
    除非使用 While,否則為必要項。重複迴圈直到 condition 為 True 為止。

  • condition
    選擇項。Boolean 運算式。如果 condition 為 Nothing,則 Visual Basic 會將它視為 False。

  • statements
    選擇項。當 condition 為 True 時,或直到 condition 為 True 之前,一或數個被重複的陳述式。

  • Exit Do
    選擇項。從 Do 迴圈當中傳出控制權。

  • Loop
    必要項。結束 Do 迴圈的定義。

備註

當您想不定次數重複一組陳述式時,請使用 Do...Loop 結構,直到滿足條件為止。如果您想重複陳述式特定數次時,For...Next 陳述式通常是較好的選擇。

Do...Loop 結構會提供給您比 While...End While 陳述式 (Visual Basic) 還多的彈性,因為它允許您在 condition 不是 True 時或當它先成為 True 時,選擇是否結束迴圈。它還允許您在迴圈開頭或結尾處測試 condition。

規則

  • 條件的本質:條件通常來自於兩個值的比較,它也可以是任何評估為 Boolean 資料型別 (Visual Basic) 值 (True 或 False) 的運算式。其中包含其他資料型別的值,例如已轉換為 Boolean 的數字型別 (Numeric Type)。

  • 測試條件:您只可以在迴圈的開頭或結尾處,測試 condition 一次。可以使用 While 或 Until 指定 condition,但不能同時使用兩者做指定。

  • 反覆運算次數:如果您在迴圈開頭處測試 condition (在 Do 陳述式中),則迴圈可能不會執行。如果您在迴圈結尾處進行測試 (在 Loop 陳述式中),則迴圈一律至少會執行一次。

  • 巢狀迴圈 您可以將一個迴圈置於另一個迴圈內,以便巢狀化 Do 迴圈。您可以將不同類型的控制結構以巢狀結構互置。如需詳細資訊,請參閱巢狀控制結構

  • 從迴圈當中傳出。Exit 陳述式 (Visual Basic) 會立即將控制權傳輸至接在 Loop 陳述式之後的陳述式。如果偵測到一個條件 (例如錯誤值或終止要求),而該條件會使迴圈不需要或不可能繼續重複執行,則您可能會想要結束迴圈。您可以將任何數目的 Exit Do 陳述式放在 Do 迴圈中的任何地方。Exit Do 通常會在評估某些條件之後使用,例如在 If...Then...Else 結構中。

無止盡迴圈

Exit Do 的其中一個用處是可以測試會造成「無止盡迴圈」的條件,無止盡迴圈就是會執行極多次,甚至無數次的迴圈。如果您偵測到這類狀況,可以使用 Exit Do 逸出此迴圈。否則,迴圈會繼續執行。

在下列範例中,指派給 number 的值可能會造成迴圈的執行次數超過 2 ^ 31 次。If 陳述式會檢查這個條件,如果該條件存在便會結束,以避免無止盡的迴圈。

Sub exitDoExample()
    Dim counter As Integer = 0
    Dim number As Integer = 8
    Do Until number = 10
        If number <= 0 Then Exit Do
        number -= 1
        counter += 1
    Loop
    MsgBox("The loop ran " & counter & " times.")
End Sub
注意事項:

若要停止無止盡的迴圈,請按下 ESC 鍵或同時按下 CTRL 鍵和 BREAK 鍵。

範例

下列範例會說明巢狀 Do...Loop 結構,以及 While 和 Until 的使用方式,並且在迴圈的開頭 (Do 陳述式) 和結尾 (Loop 陳述式) 處進行測試。

Sub DoExample()
    Dim check As Boolean = True
    Dim counter As Integer = 0
    Do
        Do While counter < 20
            counter += 1
            If counter = 10 Then
                check = False
                Exit Do
            End If
        Loop
    Loop Until check = False
End Sub

在先前的範例中,內部的 Do...Loop 結構會執行迴圈 10 次,將旗標的值設定為 False,並且使用 Exit Do 陳述式提前結束。外迴圈在檢查過旗標值之後立即結束。

請參閱

工作

HOW TO:改善迴圈的效能

概念

迴圈結構

巢狀控制結構

參考

For...Next 陳述式 (Visual Basic)

Boolean 資料型別 (Visual Basic)

Exit 陳述式 (Visual Basic)

While...End While 陳述式 (Visual Basic)