Operator Select Case używany jest do sprawdzania wartości wyrażenia zgodnie z jednym lub kilkoma przypadkami. Jest to alternatywa dla zagnieżdżonych If...ElseIf, co sprawia, że kod jest czystszy i łatwiejszy do przeczytania.
Cechy:
Case może zawierać zakresy (Case 1 To 10), pojedyncze wartości (Case 2, 4, 6), złożone wyrażenia (Case Is > 100).Skomplikowane przypadki:
Dim status As Integer = 7 Select Case status Case 1 To 5 Console.WriteLine("Od 1 do 5") Case 6, 7, 8 Console.WriteLine("Od 6 do 8") Case Is > 10 Console.WriteLine("Więcej niż 10") Case Else Console.WriteLine("Inna wartość") End Select
Różnice w porównaniu do If...ElseIf:
If...ElseIf pozwala budować bardziej elastyczne sprawdzenia z operatorami logicznymi.Pytanie: „Jak zachowa się Select Case przy sprawdzaniu wartości stringowej, jeśli przypadki różnią się wielkością liter?”
Poprawna odpowiedź: Porównanie w Select Case odbywa się z uwzględnieniem parametru Option Compare. Domyślnie porównanie w Visual Basic nie jest wrażliwe na wielkość liter (Option Compare Text), ale może być zmienione (Option Compare Binary). Jeśli włączony jest Option Compare Binary, "test" i "Test" będą traktowane jako różne.
Przykład:
' Na początku pliku: ' Option Compare Binary Dim txt As String = "Test" Select Case txt Case "test" Console.WriteLine("Zadziała? Nie") Case "Test" Console.WriteLine("Zadziała? Tak") End Select
Historia
W projekcie do zarządzania inwentaryzacją porównywano numery identyfikacyjne jako ciągi w Select Case. Podczas konwersji danych część przypadków przestała się zgadzać z powodu innego kodowania i różnicy w wielkości liter, co doprowadziło do błędnej kategoryzacji.
Historia
W tworzeniu forów internetowych używano zakresu Case 1 To 10 do sprawdzania rangi użytkownika, ale popełniono błąd przy wartości granicznej (Boundary Value) — przy status=10 sekcja nie zadziałała z powodu niedbałości przy projektowaniu.
Historia
W aplikacji bankowej próbowano sprawdzić od razu dwie zmienne w jednym przypadku (Case a > 5 And b < 3). Kod kompilował się z błędem, a przejście na If...ElseIf pomogło ujawnić błędy w logice trasowania operacji.