當 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