Switch Case
💡 Vad är Switch?
Tänk dig att du är en receptionist på Stark Tower och behöver dirigera besökare till rätt våning. Du kan inte bara gissa - du behöver ett system som snabbt och säkert skickar folk till rätt plats baserat på vem de ska träffa.
Det är exakt vad switch gör i C-Sharp. Istället för att kedja ihop massor av if-else-statements, ger switch dig ett elegant sätt att hantera flera möjliga värden för en variabel.
Switch finns i två smaker: traditionella switch-statements (som funnits länge) och moderna switch expressions (C-Sharp 8.0+).
🔧 Grundprinciper
Princip 1: Enkelhet framför komplexitet
Switch är perfekt när du har EN variabel som kan ha flera kända värden. Som att välja mat baserat på vad klockan är - frukost, lunch eller middag.
Princip 2: Performance och läsbarhet
Switch är inte bara snyggare än långa if-else-kedjor, det är också snabbare. Kompilatorn kan optimera switch på sätt som gör det blixtnabbt.
💭 Tänk så här (Pseudokod)
OM variabeln har värde A
GÖR sak nummer 1
ANNARS OM variabeln har värde B
GÖR sak nummer 2
ANNARS OM variabeln har värde C
GÖR sak nummer 3
ANNARS
GÖR standardsaken
🚀 Minimal implementation
string dayName = "måndag";
switch (dayName)
{
case "måndag":
Console.WriteLine("Ugh, måndag igen...");
break;
case "fredag":
Console.WriteLine("TGIF!");
break;
default:
Console.WriteLine("En vanlig dag i veckan");
break;
}
🟢 Grundläggande användning
// RPG-karaktär väljare som Game of Thrones
public static void SelectCharacter(string characterClass)
{
switch (characterClass.ToLower())
{
case "warrior":
Console.WriteLine("Du väljer Jon Snow - stridsklädd och redo för battle!");
Console.WriteLine("Startautrustning: Långsvärd och ringbrynja");
break;
case "mage":
Console.WriteLine("Du väljer Gandalf - full av magiska krafter!");
Console.WriteLine("Startautrustning: Trollstav och spellbook");
break;
case "rogue":
Console.WriteLine("Du väljer Arya Stark - snabb och smidig!");
Console.WriteLine("Startautrustning: Dolkar och lockpicks");
break;
default:
Console.WriteLine("Okänd karaktärsklass - du får vara en NPC!");
break;
}
}
// Användning
SelectCharacter("warrior"); // Jon Snow mode aktiverad!
🟡 Avancerad användning - Switch Expressions
// Moderne switch expression - som att uppgradera från Nokia 3310 till iPhone
public static string GetSuperheroSlogan(string heroName) => heroName switch
{
"Superman" => "Snabbare än en kula, starkare än ett lokomotiv!",
"Batman" => "I am the night!",
"Spider-Man" => "With great power comes great responsibility",
"Wonder Woman" => "I fight for those who cannot fight for themselves",
"Flash" => "Gotta go fast!",
_ => "Unidentified hero detected"
};
// Pattern matching med when-clauses - Jedi-nivå
public static string AnalyzeNumber(int number) => number switch
{
0 => "Noll - tomhet som Voldemorts hjärta",
1 => "Ett - ensamheten som Harry Potter kände",
var n when n > 0 && n <= 10 => $"{n} - inom Gryffindor räckvidd",
var n when n > 10 && n <= 100 => $"{n} - Hermiones kunskapsnivå",
var n when n > 100 => $"{n} - Dumbledores visdomslevel",
_ => "Negativa tal - Dementor energy"
};
🔴 Proffstips - Tuple Patterns
// Matrix-style decision making med tuples
public static string GetMovieRecommendation(string mood, int energy) => (mood.ToLower(), energy) switch
{
("happy", > 7) => "Top Gun: Maverick - action och glädje!",
("sad", < 5) => "The Notebook - en bra gråtfilm",
("excited", > 8) => "Avengers: Endgame - ultimat hype!",
("tired", < 3) => "En lugn dokumentär om pingviner",
("angry", _) => "John Wick - släpp ut frustrationen",
(_, 10) => "Matrix - du är på topp energi!",
_ => "Kanske bara kolla på The Office igen?"
};
// Användning
Console.WriteLine(GetMovieRecommendation("excited", 9));
// Output: Avengers: Endgame - ultimat hype!
⚠️ Vanliga misstag
- Misstag 1: Glömma
breaki traditionella switch-statements. Utan break “faller” koden genom till nästa case (fall-through behavior).
// FARLIGT - utan break!
switch (dayOfWeek)
{
case "måndag":
mood = "trött";
// break; <- DENNA SAKNAS! Kompileringsfel
case "tisdag":
mood = "fortfarande trött"; // Kommer att köras även för måndag!
break;
}
Men…
// FARLIGT - utan break!
switch (dayOfWeek)
{
case "måndag":
// break; <- DENNA SAKNAS! Här funkar det då det inte finns någon kod efter case
case "tisdag":
mood = "fortfarande trött"; // Kommer att köras även för måndag!
break;
}
- Misstag 2: Använda switch expressions fel - de ska returnera värden, inte köra statements.
// FEL - switch expressions kan inte köra Console.WriteLine direkt
var result = input switch
{
1 => Console.WriteLine("Ett"), // Kommer inte fungera!
_ => Console.WriteLine("Annat")
};
// RÄTT - returnera värden istället
var message = input switch
{
1 => "Ett",
_ => "Annat"
};
Console.WriteLine(message);
📚 Sammanfattning
- 💡 Switch statements: Perfekt för att hantera flera kända värden på en variabel
- 💡 Switch expressions: Modernare, mer koncis syntax för att returnera värden
- 💡 Pattern matching: Superkraft för att matcha komplexa mönster med when-clauses
😄 Obligatoriskt pappaskämt
“Why don’t switch statements ever get lost? Because they always know which case they’re in!”