Select...Case 陳述式 (Visual Basic)

根據運算式的值,執行幾組陳述式中的一組。

語法

Select [ Case ] testexpression
    [ Case expressionlist
        [ statements ] ]
    [ Case Else
        [ elsestatements ] ]
End Select

組件

詞彙 定義
testexpression 必要。 運段式。 必須評估為其中一個基本資料類型 (Boolean、Byte、Char、Date、Double、Decimal、Integer、Long、Object、SByte、Short、Single、String、UInteger、ULong 與 UShort)。
expressionlist Case 陳述式中的必要元素。 運算式子句的清單,表示 testexpression 的相符值。 多個運算式子句會以逗號分隔。 每個子句都可以採用下列其中一種形式:

- expression1Toexpression2
- [ Is ] comparisonoperator運算式
- 表達

使用 To 關鍵字來指定 testexpression 相符值的範圍界限。 expression1 值必須小於或等於 expression2 值。

搭配比較運算子 (Is、=、<>、<、<= 或 >) 來使用 >= 關鍵字,以指定 testexpression 相符值的限制。 若未提供 Is 關鍵字,則會在 comparisonoperator 之前自動插入該關鍵字。

只指定 expression 的形式會視為 Is 形式的特殊案例,其中 comparisonoperator 是等號 (=)。 此形式會評估為 testexpression = expression。

expressionlist 中的運算式可以是任何資料類型,前提是這些運算式可以隱含轉換成 testexpression 的類型,並且適當的 comparisonoperator 對其本身所使用的兩種類型有效。
statements 選擇性。 若 Case 符合 testexpression 中的任何子句,則會執行 expressionlist 後面的一或多個陳述式。
elsestatements 選擇性。 若 Case Else 不符合任何 testexpression 陳述式 expressionlist 中的任何子句,則會執行 Case 後面的一或多個陳述式。
End Select 終止 Select...Case 建構的定義。

備註

若 testexpression 符合任何 Caseexpressionlist 子句,則該 Case 陳述式後面的陳述式會執行到下一個 Case、Case Else 或 End Select 陳述式。 然後,控制項會傳遞至 End Select 後面的陳述式。 若 testexpression 符合多個 expressionlist 子句中的 Case 子句,則只會執行第一個相符元素後面的陳述式。

若在任何其他 Case Else 陳述式中都找不到 elsestatements 與 testexpression 子句之間的相符元素,則 expressionlist 陳述式就會用於引進要執行的 Case。 雖然並非必要,但最好在 Case Else 建構中擁有 Select Case 陳述式來處理未預期的 testexpression 值。 若沒有任何 Caseexpressionlist 子句符合 testexpression,而且沒有任何 Case Else 陳述式,則控制項會傳遞至 End Select 後面的陳述式。

您可以在每個 Case 子句中使用多個運算式或範圍。 例如,下面一行即為有效子句。

Case 1 To 4, 7 To 9, 11, 13, Is > maxNumber

注意

Is 與 Case 陳述式中使用的 Case Else 關鍵字與 Is Operator 不同,前者用於物件參考比較。

您可以指定字元字串的範圍與多個運算式。 在下列範例中,Case 符合與 "apples" 完全相等的任何字串、依字母順序排列的 "nuts" 與 "soup" 之間具有值,或是包含與目前 testItem 值完全相同的值。

Case "apples", "nuts" To "soup", testItem

Option Compare 的設定可能會影響字串比較。 在 Option Compare Text 下,字串 "Apples" 與 "apples" 會比較為相等,但在 Option Compare Binary 下則不會。

注意

具有多個子句的 Case 陳述式可以展示稱為「最少運算」的行為。 Visual Basic 會從左至右評估子句,若有一個子句產生 testexpression 的相符元素,則不會評估其餘子句。 「最少運算」可以改善效能,但若您預期評估 expressionlist 中的每個運算式,則可能會產生非預期的結果。 如需最少運算的詳細資訊,請參閱布林運算式。

若 Case 或 Case Else 陳述式區塊中的程式碼不需要在區塊中執行任何其他陳述式,則可以使用 Exit Select 陳述式結束區塊。 這會立即將控制項傳送至 End Select 後面的陳述式。

Select Case 建構可進行巢狀處理。 每個巢狀 Select Case 建構都必須有相符的 End Select 陳述式,而且必須完全包含在其進行巢狀處理之外部 Case 建構的單一 Case Else 或 Select Case 陳述式區塊中。

範例

下列範例會使用 Select Case 建構來撰寫對應至變數 number 值的行。 第二個 Case 陳述式包含符合目前 number 值的值,因此會執行撰寫 "Between 6 and 8, inclusive" 的陳述式。

Dim number As Integer = 8
Select Case number
    Case 1 To 5
        Debug.WriteLine("Between 1 and 5, inclusive")
        ' The following is the only Case clause that evaluates to True.
    Case 6, 7, 8
        Debug.WriteLine("Between 6 and 8, inclusive")
    Case 9 To 10
        Debug.WriteLine("Equal to 9 or 10")
    Case Else
        Debug.WriteLine("Not between 1 and 10, inclusive")
End Select

另請參閱