Wyrażenia switch i sprawdzanie kompletności za pomocą when (emulacja w C# 6)
Proszę emulować wyrażenia switch za pomocą klasycznych metod switch zwracających wynik, dodawać sprawdzanie warunków oraz używać default throws do wykrywania nieobsłużonych przypadków w czasie działania.
Wyrażenia switch i sprawdzanie kompletności za pomocą when (emulacja w C# 6) to bezpłatna lekcja C# Academy na CoddyKit. To lekcja 2 z 3. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej C# Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs C# Academy zawiera 3 lekcji w sumie.
Plan: naśladowanie switch
Cel: Naśladować współczesne wyrażenia switch w C# 6.
- Zwracaj wartości z klasycznej instrukcji switch
- Wstępnie sprawdzaj dane za pomocą warunków ochronnych
- Szybko kończ działanie przez default throw, aby zapewnić obsługę wszystkich przypadków
Instrukcja switch zwracająca wartość
Instrukcja switch, która zwraca wartość, działa jak wyrażenie switch. default rzucający wyjątek przechwytuje nieznane wartości.
using System;
public enum Grade { A, B, C, D, F }
public class Program
{
static string Describe(Grade g)
{
switch (g)
{
case Grade.A: return "Excellent";
case Grade.B: return "Good";
case Grade.C: return "Average";
case Grade.D: return "Below average";
case Grade.F: return "Fail";
default: throw new ArgumentOutOfRangeException("g");
}
}
public static void Main(string[] args)
{
Console.WriteLine(Describe(Grade.A));
Console.WriteLine(Describe(Grade.F));
}
}
„when” za pomocą guardów
Należy używać sprawdzania guardami (ifs), aby emulować klauzule when. Najpierw należy zweryfikować dane wejściowe, a następnie rozgałęzić logikę według zakresów.
using System;
public class Program
{
// Emulate: switch(score) { case var s when s >= 90: ... } using pre-guards
static string LabelScore(int score)
{
if (score < 0 || score > 100) throw new ArgumentOutOfRangeException("score");
if (score >= 90) return "A";
if (score >= 80) return "B";
if (score >= 70) return "C";
if (score >= 60) return "D";
return "F";
}
public static void Main(string[] args)
{
Console.WriteLine(LabelScore(92)); // A
Console.WriteLine(LabelScore(77)); // C
}
}
Pomocnik kompletności
Należy dodać niewielki pomocnik Exhaustive.Unhandled i wywoływać go w default. Testy zakończą się niepowodzeniem, gdy nowa wartość enuma nie będzie obsługiwana.
using System;
public enum Status { New, Active, Closed }
public static class Exhaustive
{
public static Exception Unhandled(object x)
{
return new InvalidOperationException("Unhandled case: " + x);
}
}
public class Program
{
static int ToHttp(Status s)
{
switch (s)
{
case Status.New: return 201;
case Status.Active: return 200;
case Status.Closed: return 410;
default: throw Exhaustive.Unhandled(s);
}
}
public static void Main(string[] args)
{
Console.WriteLine(ToHttp(Status.Active)); // 200
}
}
Guardy + switch po kind
Należy zweryfikować dane dla każdej gałęzi za pomocą guardów wstępnych, a następnie wykonać switch po dyskryminatorze. Odpowiada to użyciu „when” w poszczególnych przypadkach.
using System;
public enum ShapeKind { Circle, Square }
public sealed class Shape
{
public ShapeKind Kind;
public double Radius; // for circle
public double Side; // for square
}
public class Program
{
static double Area(Shape s)
{
if (s == null) throw new ArgumentNullException("s");
// “when” guards (validate needed fields)
if (s.Kind == ShapeKind.Circle && s.Radius < 0) throw new ArgumentException("Radius must be >= 0");
if (s.Kind == ShapeKind.Square && s.Side < 0) throw new ArgumentException("Side must be >= 0");
switch (s.Kind)
{
case ShapeKind.Circle: return Math.PI * s.Radius * s.Radius;
case ShapeKind.Square: return s.Side * s.Side;
default: throw new InvalidOperationException("Unhandled shape: " + s.Kind);
}
}
public static void Main(string[] args)
{
Shape c = new Shape { Kind = ShapeKind.Circle, Radius = 2.0 };
Console.WriteLine("Area circle = " + Area(c));
}
}
Wskazówki i pułapki
Wskazówki:
- Należy preferować małe metody zwracające wynik (jedna odpowiedzialność)
- Należy zachować default rzucający wyjątek, aby wcześnie ujawniać brakujące przypadki
- Należy umieszczać guardy przed switch; działają jak warunki when
Emulowanie kompletności
Podsumowanie
Podsumowanie: Należy zwracać wartość z klasycznego switch, podobnie jak z wyrażenia switch, dodawać guardy dla „when” i zachować default rzucający wyjątek, aby ujawniać brakujące przypadki.
Ucz się C# dzięki korepetycjom AI — za darmo
Pisz i uruchamiaj kod w przeglądarce, otrzymuj natychmiastową pomoc od korepetytora AI dostępnego 24/7 i kontynuuj naukę w sieci lub w aplikacji.
- Kursy
- 93
- Lekcje
- 346
Często zadawane pytania
Czy lekcja „Wyrażenia switch i sprawdzanie kompletności za pomocą when (emulacja w C# 6)” jest bezpłatna?
Tak — pełny tekst „Wyrażenia switch i sprawdzanie kompletności za pomocą when (emulacja w C# 6)” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu C# Academy, przejdź na CoddyKit PRO. Kurs C# Academy zawiera 3 lekcji w sumie.
Co nauczysz się w „Wyrażenia switch i sprawdzanie kompletności za pomocą when (emulacja w C# 6)”?
Proszę emulować wyrażenia switch za pomocą klasycznych metod switch zwracających wynik, dodawać sprawdzanie warunków oraz używać default throws do wykrywania nieobsłużonych przypadków w czasie działa… Ćwiczysz C# Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.
Czy potrzebuję doświadczenia, aby zacząć C# Academy?
Nie wymagamy żadnego doświadczenia. C# Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 2 z 3.
Ile czasu zajmuje lekcja „Wyrażenia switch i sprawdzanie kompletności za pomocą when (emulacja w C# 6)”?
Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.
Czy mogę pisać i uruchamiać kod w tej lekcji C# Academy?
Tak. Każda lekcja C# Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.
Wszystkie lekcje w tym kursie
- Wzorce is, relacyjne i logiczne (emulacja w C# 6)
- Wyrażenia switch i sprawdzanie kompletności za pomocą when (emulacja w C# 6)
- Modelowanie domeny za pomocą sum rozłącznych (rekordy) — emulacja w C# 6