Select...Case — Instrukcja (Visual Basic)

Uruchamia jedną z kilku grup instrukcji w zależności od wartości wyrażenia.

Składnia

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

generatora

Termin Definicja
testexpression Wymagany. Wyrażenie. Musi zostać obliczona jedna z podstawowych typów danych (Boolean, , CharStringIntegerDecimalLongDoubleObjectSByteDateByteSingleUIntegerShortULongi ).UShort
expressionlist Wymagane w instrukcji Case . Lista klauzul wyrażeń reprezentujących wartości dopasowania dla elementu testexpression. Wiele klauzul wyrażeń jest rozdzielonych przecinkami. Każda klauzula może mieć jedną z następujących form:

- wyrażenie1To— wyrażenie2
- [ Is ] wyrażenie porównaniaoperatora
- Wyrażenie

Użyj słowa kluczowego To , aby określić granice zakresu wartości dopasowania dla elementu testexpression. Wartość expression1 musi być mniejsza lub równa wartości expression2.

Is Użyj słowa kluczowego z operatorem porównania (=, <>, , <<=, >lub >=), aby określić ograniczenie dotyczące wartości dopasowania dla elementu testexpression. Is Jeśli słowo kluczowe nie zostanie podane, zostanie ono automatycznie wstawione przed modułem porównania.

Formularz określający tylko expression jest traktowany jako specjalny przypadek Is formularza, w którym element comparisonoperator jest znakiem równości (=). Ten formularz jest oceniany jako testexpression = expression.

Wyrażenia w programie expressionlist mogą być dowolnym typem danych, pod warunkiem, że są niejawnie konwertowane na typ testexpression , a odpowiednie comparisonoperator jest prawidłowe dla dwóch typów, z którymi jest używany.
statements Opcjonalny. Co najmniej jedna instrukcja po Case uruchomieniu, jeśli testexpression pasuje do jakiejkolwiek klauzuli w pliku expressionlist.
elsestatements Opcjonalny. Co najmniej jedna instrukcja po Case Else uruchomieniu, jeśli testexpression nie jest zgodna z żadną klauzulą w expressionlist żadnej z instrukcji Case .
End Select Kończy definicję Selectkonstrukcji ...Case

Uwagi

Jeśli testexpression pasuje do jakiejkolwiek Caseexpressionlist klauzuli, instrukcje następujące po tej Case instrukcji są uruchamiane do następnej Caseinstrukcji , Case Elselub End Select . Następnie kontrolka przekazuje do instrukcji następującej End Select: . Jeśli testexpression pasuje do klauzuli expressionlist w więcej niż jednej Case klauzuli, tylko instrukcje po pierwszym uruchomieniu dopasowania.

Instrukcja Case Else służy do wprowadzenia elsestatements do uruchomienia, jeśli nie znaleziono dopasowania między testexpression klauzulą expressionlist i w żadnej z innych Case instrukcji. Chociaż nie jest to wymagane, dobrym pomysłem jest posiadanie Case Else instrukcji w konstrukcji Select Case w celu obsługi nieprzewidzianych testexpression wartości. Jeśli żadna klauzula nie Caseexpressionlist jest zgodna testexpression i nie Case Else ma instrukcji , kontrolka przekazuje do instrukcji następującej : End Select.

W każdej Case klauzuli można użyć wielu wyrażeń lub zakresów. Na przykład następujący wiersz jest prawidłowy.

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

Uwaga

Słowo Is kluczowe używane w instrukcjach Case i Case Else nie jest takie samo jak operator is, który jest używany do porównania odwołań do obiektów.

Można określić zakresy i wiele wyrażeń dla ciągów znaków. W poniższym przykładzie Case pasuje do dowolnego ciągu, który jest dokładnie równy "apples", ma wartość między "orzechami" i "zupą" w kolejności alfabetycznej lub zawiera dokładnie taką samą wartość jak bieżąca wartość testItem.

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

Ustawienie Option Compare może mieć wpływ na porównania ciągów. W obszarze Option Compare Textciągi "Apples" i "apples" są porównywane jako równe, ale w obszarze Option Compare Binary, nie.

Uwaga

Instrukcja Case z wieloma klauzulami może wykazywać zachowanie znane jako zwarcie. Program Visual Basic ocenia klauzule od lewej do prawej, a jeśli element generuje dopasowanie z elementem testexpression, pozostałe klauzule nie są oceniane. Zwarcie może poprawić wydajność, ale może generować nieoczekiwane wyniki, jeśli oczekujesz, że każde wyrażenie expressionlist zostanie ocenione. Aby uzyskać więcej informacji na temat zwarć, zobacz Wyrażenia logiczne.

Jeśli kod w Case bloku instrukcji lub Case Else nie musi uruchamiać więcej instrukcji w bloku, może zamknąć blok przy użyciu instrukcji Exit Select . Spowoduje to natychmiastowe przeniesienie kontrolki do instrukcji następującej: End Select.

Select Case konstrukcje mogą być zagnieżdżone. Każda konstrukcja zagnieżdżona Select Case musi mieć zgodną End Select instrukcję i musi być całkowicie zawarta w jednym Case bloku Case Else instrukcji zewnętrznej Select Case konstrukcji, w której jest zagnieżdżona.

Przykład

W poniższym przykładzie użyto Select Case konstrukcji do zapisania wiersza odpowiadającego wartości zmiennej number. Druga Case instrukcja zawiera wartość zgodną z numberbieżącą wartością , więc instrukcja, która zapisuje ciąg "Od 6 do 8 włącznie".

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

Zobacz też