共用方式為


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 陳述式通常是較好的選擇。

可以使用 While 或 Until 指定 condition,但不能同時使用兩者做指定。

您只可以在迴圈的開頭或結尾處,測試 condition 一次。 如果您在迴圈開頭處測試 condition (在 Do 陳述式中),則迴圈可能一次都不會執行。 如果您在迴圈結尾處進行測試 (在 Loop 陳述式中),則迴圈永遠至少執行一次。

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

您可以將一個迴圈置於另一個迴圈內,使 Do 迴圈套疊成巢狀。 您可以將不同類型的控制結構相互套疊成巢狀。 如需詳細資訊,請參閱 巢狀控制結構 (Visual Basic)

注意事項注意事項

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

Exit Do

Exit Do 陳述式可以提供結束 Do…Loop 的替代方式。 Exit Do 會立即將控制權轉移至 Loop 陳述式隨後的陳述式。

Exit Do 通常會在評估一些條件之後使用,例如 If...Then...Else 結構。 如果偵測到一個條件 (例如錯誤值或終止要求),而該條件會使迴圈不需要或不可能繼續重複執行,則您可能會想要結束迴圈。 Exit Do 的其中一個用處是可以測試會造成「無止盡迴圈」(Endless Loop) 的條件,無止盡迴圈就是會執行極多次,甚至無數次的迴圈。 您可以使用 Exit Do 離開迴圈。

您可以將任意數目的 Exit Do 陳述式包含在 Do…Loop 中的任何位置。

用於巢狀的 Do 迴圈內時,Exit Do 會將控制權轉移到最內層迴圈的外部,再轉入下一個較高的巢狀層次。

範例

在下列範例中,迴圈中的陳述式會繼續執行,直到 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 

下列範例會使用 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 

在下列範例中,當 index 變數大於 100 時,condition 就會停止迴圈。 但是當索引變數大於 10 時,迴圈中的 If 陳述式會導致 Exit Do 陳述式停止迴圈。

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 

下列範例會讀取文字檔中的所有文字行。 OpenText 方法會開啟檔案,並傳回讀取字元的 StreamReader。 在 Do...Loop 的情況下,StreamReaderPeek 方法會判斷是否存在任何額外的字元。

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

請參閱

參考

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

Boolean 資料型別 (Visual Basic)

Exit 陳述式 (Visual Basic)

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

概念

迴圈結構 (Visual Basic)

巢狀控制結構 (Visual Basic)