"Przełącznik", czyli instrukcja switch
, jest kontynuacją wcześniejszej notatki odnoszącej się do instrukcji sterujących.
Polecenie switch
stanowi alternatywę dla kaskadowej instrukcji if
, z tą różnicą, że określenie ścieżki odbywa się na podstawie wartości jednej zmiennej.
Kod poniżej nawiązuje do wcześniejszego wpisu Instrukcje sterujące, w którym pytaliśmy o liczbę lat programowania w C#. W tym przykładzie, zamiast podawać dokładną liczbę, ograniczamy się do słownego określenia długości.
using System;
namespace HelloWorld
{
public static class Program
{
public static void Main()
{
Console.WriteLine("How long have you been programming in C#?");
Console.WriteLine("Choose: long, medium, short or any.");
string inputText = Console.ReadLine();
switch (inputText)
{
case "long":
Console.Write("You're a seasoned programmer.");
break;
case "medium":
Console.Write("You're gaining experience.");
break;
case "short":
Console.Write("You are a novice programmer.");
break;
case "any":
Console.Write("Give it a try, it's really cool.");
break;
}
Console.ReadKey();
}
}
}
Składnia instrukcji switch
rozpoczyna się od słowa kluczowego, a w nawiasach umieszczony jest warunek wejścia w konkretną sekcję.
Warunek może przyjąć wartość typu: bool
, int
, char
, string
lub typu wyliczeniowego.
Instrukcja ograniczona jest parą nawiasów klamrowych, wewnątrz których znajduje się seria sekcji case
, definiujących operacje dla danej wartości.
Każda z sekcji zakończona jest słowem kluczowym break
, które jest obowiązkowe i powoduje wyjście z instrukcji.
Alternatywnie blok sekcji można zakończyć wyjściem z metody za pomocą słowa kluczowego return
, rzucając wyjątek lub korzystając z goto case
.
Instrukcja umożliwia zdefiniowanie sekcji default
, do której przejdziemy, gdy żadna z wartości nie spełni warunku. Poniżej przykład z użyciem tej sekcji.
using System;
namespace HelloWorld
{
public static class Program
{
public static void Main()
{
Console.WriteLine("How long have you been programming in C#?");
Console.WriteLine("Choose: long, medium, short or any.");
string inputText = Console.ReadLine();
switch (inputText)
{
case "Long":
case "long":
Console.Write("You're a seasoned programmer.");
break;
case "Medium":
case "medium":
Console.Write("You're gaining experience.");
break;
case "Short":
case "short":
Console.Write("You are a novice programmer.");
break;
case "Any":
case "any":
Console.Write("Give it a try, it's really cool.");
break;
default:
Console.Write("Invalid input.");
break;
}
Console.ReadKey();
}
}
}
W przykładzie rozszerzyliśmy sekcje o drugą wartość zaczynającą się wielką literą, aby obsłużyć obie formy pisowni.
"Lepszym" rozwiązaniem byłoby użycie metody ToUpper
na zmiennej inputText
, co uczyni kod odpornym na różne formy pisowni wprowadzane przez użytkownika.
Poniżej zmodyfikowany kod z wykorzystaniem tej metody.
using System;
namespace HelloWorld
{
public static class Program
{
public static void Main()
{
Console.WriteLine("How long have you been programming in C#?");
Console.WriteLine("Choose: long, medium, short or any.");
string inputText = Console.ReadLine();
switch (inputText.ToUpper())
{
case "LONG":
Console.Write("You're a seasoned programmer.");
break;
case "MEDIUM":
Console.Write("You're gaining experience.");
break;
case "SHORT":
Console.Write("You are a novice programmer.");
break;
case "ANY":
Console.Write("Give it a try, it's really cool.");
break;
default:
Console.Write("Invalid input.");
break;
}
Console.ReadKey();
}
}
}
W C# nie ma automatycznego "przechodzenia" przez sekcje, jak w C. Każda sekcja musi być zakończona break
, chyba że używamy goto case
.
Instrukcja goto case
pozwala na wyraźne zadeklarowanie "przejścia" do innej sekcji.
using System;
namespace HelloWorld
{
public static class Program
{
public static void Main()
{
string inputText = Console.ReadLine();
switch (inputText)
{
case "one":
Console.Write("one");
break;
case "two":
Console.Write("two");
goto case "one";
}
Console.ReadKey();
}
}
}
Po przeczytaniu tej oraz wcześniejszej notatki powinniśmy wiedzieć, jak korzystać z instrukcji sterujących, w tym z switch
.
Przed nami zasady działania pętli, o których możesz przeczytać tutaj.