做。。。循環語句 (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...下一個語句 通常是較佳的選擇。

您可以使用 While 或 Until 指定 ,但不能同時指定 condition兩者。 如果您未提供,迴圈會繼續執行,直到 Exit 傳輸控件離開循環為止。

您只能在循環的開頭或結尾測試 condition 一次。 如果您在迴圈開頭進行測試 condition (在 語句中 Do ),迴圈甚至可能一次執行。 如果您在循環結尾測試 (在 語句中 Loop ),迴圈一律至少會執行一次。

條件通常會產生兩個值的比較,但它可以是評估為 布爾數據類型 值 (True 或 False) 的任何表達式。 這包括其他數據類型的值,例如已轉換成 Boolean的數值型別。

您可以透過將一個迴圈放入另一個迴圈中來實現巢狀 Do 迴圈。 您也可以將不同類型的控件結構巢狀於彼此內。 如需詳細資訊,請參閱 巢狀控件結構。

備註

結構Do...Loop提供比 While... 更多的彈性...End While 語句,因為它可讓您決定在停止True時還是第一次變成 True時condition結束迴圈。 它也可讓您在迴圈的開頭或結尾進行測試 condition 。

結束 Do

Exit Do 語句可以提供結束 的Do…Loop替代方式。 Exit Do 會立即將控制權傳送至語句之後的 Loop 語句。

Exit Do 通常會在評估某些條件之後使用,例如在結構中 If...Then...Else 。 如果您偵測到不必要或不可能繼續逐一查看的條件,例如錯誤值或終止要求,您可能會想要結束迴圈。 的 Exit Do 其中一個用法是測試可能導致 無休止循環的條件,也就是可以執行大量甚至無限次數的迴圈。 您可以使用 Exit Do 來逸出迴圈。

您可以在中的任何位置包含任意數目的 Exit DoDo…Loop語句。

在巢狀 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

在下列範例中,當變數大於 100 時index,condition停止迴圈。 不過,迴圈 If 中的語句會在索引變數大於 10 時停止 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 

範例 4

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

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

另請參閱