Porównanie if i switch
Część sekcji Logika i sterowanie przepływem ścieżki C# w Coddy. Lekcja 10 z 66.
C# oferuje dwa podstawowe sposoby obsługi wielu warunków: instrukcje if-else i instrukcje switch. Każdy z nich ma swoje zalety w różnych sytuacjach.
Instrukcje if-else są elastyczne i mogą obsługiwać dowolny typ warunku:
string grade = "B";
if (grade == "A")
{
Console.WriteLine("Excellent");
}
else if (grade == "B")
{
Console.WriteLine("Good");
}
else if (grade == "C")
{
Console.WriteLine("Satisfactory");
}
else
{
Console.WriteLine("Needs improvement");
}Instrukcje switch są czytelniejsze, gdy porównujesz jedną zmienną z wieloma stałymi wartościami:
string grade = "B";
switch (grade)
{
case "A":
Console.WriteLine("Excellent");
break;
case "B":
Console.WriteLine("Good");
break;
case "C":
Console.WriteLine("Satisfactory");
break;
default:
Console.WriteLine("Needs improvement");
break;
}Instrukcja switch może grupować wiele przypadków (przechodzenie dalej), tak aby miały ten sam wynik. Umieść etykiety case jedna po drugiej, bez kodu między nimi, i dodaj tylko jedną instrukcję break na końcu:
string grade = "B";
switch (grade)
{
case "A":
case "a":
Console.WriteLine("Excellent - 4 points");
break;
case "B":
case "b":
Console.WriteLine("Good - 3 points");
break;
case "C":
case "c":
Console.WriteLine("Satisfactory - 2 points");
break;
default:
Console.WriteLine("Needs improvement");
break;
}Tutaj zarówno "B", jak i "b" przechodzą do tego samego bloku i wypisują "Good - 3 points". Ten wzorzec jest przydatny, gdy chcesz, aby wielkie i małe litery lub dowolny zestaw wartości dawały ten sam wynik.
Instrukcja switch może również grupować przypadki z różnymi etykietami, które mają ten sam rezultat:
char dayCode = 'M';
switch (dayCode)
{
case 'M':
Console.WriteLine("Monday");
break;
case 'T':
Console.WriteLine("Tuesday or Thursday");
break;
case 'W':
Console.WriteLine("Wednesday");
break;
case 'F':
Console.WriteLine("Friday");
break;
default:
Console.WriteLine("Unknown day");
break;
}Wyzwanie
ŚredniUtwórz metodę o nazwie convertGradeToPoints, która:
- Przyjmuje ocenę literową jako parametr typu string
- Konwertuje ją na numeryczną wartość punktową, używając zarówno podejścia switch, jak i if-else
- Metoda powinna implementować oba podejścia i zwracać wynik implementacji switch
- Użyj następujących przeliczeń ocen:
- "A" lub "a" = 4
- "B" lub "b" = 3
- "C" lub "c" = 2
- "D" lub "d" = 1
- "F" lub "f" = 0
- Każda inna wartość wejściowa = -1
Spróbuj swoich sił
public class ConvertGradeToPoints
{
// Zaimplementuj metodę convertGradeToPoints
public static int convertGradeToPoints(string letterGrade)
{
// Wpisz tutaj swój kod
}
}Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.
Wszystkie lekcje w sekcji Logika i sterowanie przepływem
1Tablice wielowymiarowe
Podstawy tablic 2DDeklarowanie i inicjalizacja tablic 2DDostęp do elementów tablic 2DZagnieżdżone pętle z tablicami 2DTablice postrzępionePodstawowe operacje na macierzachPodsumowanie — tablice wielowymiarowe4Techniki sterowania przepływem
Wczesne zwrotyKlauzule ochronneInstrukcje skoku (goto)Break i continueSpłaszczanie zagnieżdżonych warunków7Zaawansowane operatory logiczne
Ewaluacja z krótkim spięciemWarunkowe operatory logicznePriorytet operatorówPowtórzenie — zaawansowane operatory2Zaawansowane podejmowanie decyzji
Wiele warunkówZłożona logika Boole’aPorównanie if i switchZagnieżdżone instrukcje switchPodsumowanie — zaawansowane decyzje5Obsługa wyjątków
Podstawy try-catchTypy wyjątkówWiele bloków catchPraca z plikamiBlok finallyusing a try-finallyWłasne wyjątkiPowtórzenie — obsługa błędów3Udoskonalenia pętli
Wydajność pętliIterowanie po złożonych strukturachKażdy typ pętliRefaktoryzacja pętliPodsumowanie — zoptymalizowane pętle6Obsługa wartości null
Podstawy referencji nullTypy wartości dopuszczające nullWzorce sprawdzania nullProgramowanie defensywnePodsumowanie — bezpieczeństwo nullPoćwicz samodzielnie: Kompilator C# online