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 的情況下,StreamReader 的 Peek 方法會判斷是否存在任何額外的字元。
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
請參閱
參考
While...End While 陳述式 (Visual Basic)