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,則無法指定。 重複迴圈,直到 conditionFalse 為止。
Until 如果使用 While,則無法指定。 重複迴圈,直到 conditionTrue 為止。
condition 選擇性。 Boolean運算式。 如果 conditionNothing,則 Visual Basic 會將其視為 False
statements 選擇性。 當或直到 conditionTrue 時所重複的一或多個陳述式。
Continue Do 選擇性。 將控制權轉移到 Do 迴圈的下一次反覆運算。
Exit Do 選擇性。 將控制權轉移出 Do 迴圈。
Loop 必要。 終止 Do 迴圈的定義。

備註

當您想要無限次重複一組陳述式時 (直到滿足條件),請使用 Do...Loop 結構。 如果您想要重複陳述式一定次數,則 For...Next 陳述式通常是更好的選擇。

您可以使用 WhileUntil 來指定 condition,但不能同時使用這兩個。 如果這兩個您都不指定,則迴圈會繼續執行,直到 Exit 將控制權轉移出迴圈為止。

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

條件通常是兩個值的比較結果,但它可以是評估為布林值資料類型的值 (TrueFalse) 的任何運算式。 這包括已轉換成 Boolean 的其他資料類型的值 (例如數值類型)。

您可以將一個迴圈放在另一個迴圈內,以內嵌 Do 迴圈。 您也可以將不同類型的控制結構相互內嵌。 如需詳細資訊,請參閱巢狀控制結構

注意

Do...Loop 結構為您提供比 [While...End While 陳述式] 更靈活的彈性,因為它可讓您決定是在 condition 不再為 True 時還是在它第一次變為 True 時結束迴圈。 它也可讓您在迴圈的開頭或結尾測試 condition

Exit Do

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

Exit Do 通常會在評估某個條件之後使用,例如在 If...Then...Else 結構中。 如果您偵測到迴圈不需要或不可能繼續反覆運算的條件 (例如錯誤的值或終止要求),您可能會想要結束迴圈。 Exit Do 的一個用途是針對可能導致無限迴圈 的條件進行測試,該循環是一個可能會執行非常多次或甚至無限次數的迴圈。 您可以使用 Exit Do 來逸出迴圈。

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

在巢狀 Do 迴圈內使用時,Exit Do 會將控制權轉移出最內部迴圈,再轉移到巢狀項目的下一個更高層級。

範例 1

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

範例 2

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

範例 3

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

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 

範例 4

下列範例會讀取文字檔中的所有行。 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

另請參閱