switch-uttryck; fullständighetskontroller med when (C# 6-emulering)
Emulera switch-uttryck med klassiska metoder som returnerar från switch, lägg till skyddskontroller och använd default-throw för att upptäcka ohanterade fall vid körning.
switch-uttryck; fullständighetskontroller med when (C# 6-emulering) är en gratis lektion i C# Academy på CoddyKit. Detta är lektion 2 av 3. Ni kan läsa hela lektionen gratis nedan och sedan öva praktiskt i webbläsaren med en inbyggd kodredigerare och en AI-handledare som är tillgänglig dygnet runt. Den ingår i lärvägen för C# Academy, och Era framsteg synkroniseras mellan webben och CoddyKit-appen. Kursen i C# Academy innehåller totalt 3 lektioner.
Plan: emulera switch
Mål: Efterlikna moderna switch-uttryck i C# 6.
- Returnera värden från en klassisk switch
- Gör en förhandskontroll med skyddskontroller
- Avsluta direkt med default throw för fullständighet
Switch som returnerar ett värde
En switch som returnerar ett värde fungerar som ett switch-uttryck. default throw fångar okända värden.
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 via guard-kontroller
Använd guard-kontroller (ifs) för att efterlikna when-satser. Validera indata först och välj sedan gren utifrån intervall.
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
}
}
Hjälpmetod för uttömmande hantering
Lägg till en liten hjälpmetod, Exhaustive.Unhandled, och anropa den i default. Tester misslyckas när ett nytt enum-värde inte hanteras.
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
}
}
Guard-kontroller + switch på typmarkör
Validera data per gren med pre-guards och gör sedan en switch på diskriminanten. Det efterliknar “when” för olika fall.
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));
}
}
Tips och fallgropar
Tips:
- Föredra små metoder som returnerar (ett enda ansvar)
- Låt default kasta ett undantag så att saknade fall upptäcks tidigt
- Placera guard-kontroller före switch; de fungerar som when-villkor
Efterlikna uttömmande hantering
Sammanfattning
Sammanfattning: Returnera från en klassisk switch som från ett switch-uttryck, lägg till guard-kontroller för “when” och använd default throw för att synliggöra saknade fall.
Lär dig C# med en AI-lärare – gratis
Skriv och kör riktig kod i webbläsaren, få omedelbar hjälp av en AI-lärare dygnet runt och fortsätt där du slutade – på webben eller i appen.
- Kurser
- 93
- Lektioner
- 346
Vanliga frågor
Är lektionen ”switch-uttryck; fullständighetskontroller med when (C# 6-emulering)” gratis?
Ja – hela texten till ”switch-uttryck; fullständighetskontroller med when (C# 6-emulering)” kan läsas gratis här på webben. Om Ni vill öva interaktivt med en inbyggd kodredigerare och en AI-handledare som är tillgänglig dygnet runt och låsa upp resten av kursen i C# Academy, kan Ni uppgradera till CoddyKit PRO. Kursen i C# Academy innehåller totalt 3 lektioner.
Vad lär jag mig i ”switch-uttryck; fullständighetskontroller med when (C# 6-emulering)”?
Emulera switch-uttryck med klassiska metoder som returnerar från switch, lägg till skyddskontroller och använd default-throw för att upptäcka ohanterade fall vid körning. Ni övar på C# Academy med praktisk kod som körs direkt i webbläsaren, medan en AI-handledare som är tillgänglig dygnet runt svarar på Era frågor under lektionen.
Behöver jag någon erfarenhet för att börja lära mig C# Academy?
Du behöver inga förkunskaper. Utbildningen i C# Academy på CoddyKit är upplagd för allt från nybörjare till avancerade elever, så att du kan börja här eller från början och gå fram i din egen takt. Detta är lektion 2 av 3.
Hur lång tid tar lektionen ”switch-uttryck; fullständighetskontroller med when (C# 6-emulering)”?
De flesta CoddyKit-lektioner tar cirka 5–10 minuter. Varje lektion är kort och interaktiv, så att du gör stadiga framsteg och kan fortsätta precis där du slutade – på webben eller i appen.
Kan jag skriva och köra kod i den här C# Academy-lektionen?
Ja. Varje C# Academy-lektion innehåller en inbyggd kodredigerare, så att du kan skriva och köra riktig kod direkt i webbläsaren och få omedelbar AI-feedback – utan lokal installation.
Alla lektioner i den här kursen
- is-mönster; relationella och logiska mönster (C# 6-emulering)
- switch-uttryck; fullständighetskontroller med when (C# 6-emulering)
- Domänmodellering med diskriminerade unioner (records) – C# 6-emulering