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 , , Char String Integer Decimal Long Double Object SByte Date Byte Single UInteger Short ULong i ).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żenie1 To — 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ę Select konstrukcji ...Case |
Uwagi
Jeśli testexpression
pasuje do jakiejkolwiek Case
expressionlist
klauzuli, instrukcje następujące po tej Case
instrukcji są uruchamiane do następnej Case
instrukcji , Case Else
lub 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 Case
expressionlist
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 Text
cią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 number
bieżą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