Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Tip
Dieser Artikel ist Teil des Abschnitts "Grundlagen" für Entwickler, die bereits mindestens eine Programmiersprache kennen und C# erlernen. Wenn Sie noch nicht mit der Programmierung vertraut sind, beginnen Sie zuerst mit den Lernprogrammen " Erste Schritte ". Die vollständige Syntax finden Sie in den Auswahlanweisungen in der Sprachreferenz.
Kommen Sie aus einer anderen Sprache? C++, Java und JavaScript teilen alle C-Erbe, also if, elseund switch lesen sie dasselbe in C#. Der eine Unterschied, den man beachten sollte: C# verbietet das Fall-through zwischen nichtleeren switch Fällen, und jede case Bezeichnung kann ein Muster statt nur eine Konstante prüfen. Wenn Sie von Python kommen, entspricht C#s if/else if/else dem if/elif/else, und C#s musterbasiertes switch kommt der Python-match-Anweisung am nächsten.
Auswahlanweisungen wählen aus, welcher Codeblock basierend auf einer Bedingung ausgeführt wird. C# stellt zwei bereit: if (mit einem optionalen else) für die Verzweigung eines booleschen Werts und switch für den Vergleich eines Werts mit mehreren Fällen. Ein boolescher Ausdruck ist jeder Ausdruck, der zu true oder false ausgewertet wird, beispielsweise der Vergleich temperature >= 25.
Verzweigung mit if und else
Eine if-Anweisung führt ihren Block nur aus, wenn ihr Boolescher Ausdruck true ist. Fügen Sie einen else Block hinzu, um den Code zu liefern, der ausgeführt wird, wenn die Bedingung lautet false:
int temperature = 28;
// An if statement runs its block only when the condition is true.
// The else block runs when the condition is false.
if (temperature >= 25)
{
Console.WriteLine("Warm"); // => Warm
}
else
{
Console.WriteLine("Cool");
}
Der Rumpf einer if oder else ist eine einzelne Anweisung, z. B. eine Zuweisung oder ein Methodenaufruf. Eine Block-Anweisung ist selbst eine einzelne Anweisung, die null oder mehr Anweisungen in geschweifte Klammern ({ }) einschließt.
Viele Programmierstandards empfehlen, die Zweigblöcke selbst bei nur einer Anweisung in geschweifte Klammern zu setzen. Geschweifte Klammern machen den Gültigkeitsbereich explizit. Es verhindert einen häufigen Fehler: später eine zweite Zeile hinzuzufügen, von der Sie erwarten, dass sie nur bedingt ausgeführt wird, die stattdessen aber immer ausgeführt wird. Nur die geschweiften Klammern entscheiden, welche Anweisungen zu dem Zweig gehören. C# behandelt Leerzeichen nicht als signifikant, sodass der Einzug allein nie funktioniert. Geschweifte Klammern sind auch bei einer einzelnen Zeile zulässig: Der Block ist die eine Anweisung, die in diesem Zweig ausgeführt wird. Rücken Sie Ihren Code der Lesbarkeit halber ein, aber verwenden Sie geschweifte Klammern zur Definition des Blocks.
Testen mehrerer Bedingungen mit else if
Um zwischen mehr als zwei Pfaden auszuwählen, verketten Sie Bedingungen mit else if. C# wertet jede Bedingung in der Reihenfolge aus und führt den ersten Block aus, dessen Bedingung lautet true, und überspringt dann den Rest. Ein letztes else behandelt jeden verbleibenden Fall:
int score = 82;
// Chain conditions with else if. The first branch whose condition is
// true runs; the compiler skips the rest.
string grade;
if (score >= 90)
{
grade = "A";
}
else if (score >= 80)
{
grade = "B";
}
else if (score >= 70)
{
grade = "C";
}
else
{
grade = "F";
}
Console.WriteLine(grade); // => B
Die Reihenfolge ist in einer Kette wichtig. Da die erste übereinstimmende Bedingung gewinnt, legen Sie die spezifischesten Bedingungen zuerst fest. Im vorherigen Beispiel stellt das Testen von score >= 80 vor score >= 70 sicher, dass ein Wert von 82 "B" statt "C" zugeordnet wird.
Einen Wert mit einer switch-Anweisung abgleichen
Wenn Sie einen einzelnen Wert mit vielen diskreten Fällen vergleichen, ist eine switch-Anweisung besser lesbar als eine lange else if-Kette. Wie ifbei der switch Anweisung handelt es sich um eine Verzweigungsanweisung: Sie wählt den auszuführenden Code aus. Jede case Bezeichnung listet einen übereinstimmenden Wert auf, und jeder case Abschnitt endet mit einer break Anweisung. Stapeln Sie Beschriftungen, um einen Textkörper freizugeben, und verwenden Sie den default Abschnitt für Werte, für die kein Fall übereinstimmt:
DayOfWeek day = DayOfWeek.Saturday;
// A switch statement compares one value against several case labels.
// Stacked labels share a body. Each section ends with break, and the
// default section runs when no case matches.
switch (day)
{
case DayOfWeek.Saturday:
case DayOfWeek.Sunday:
Console.WriteLine("Weekend"); // => Weekend
break;
default:
Console.WriteLine("Weekday");
break;
}
Im Gegensatz zu C und Java lässt C# nicht zu, dass die Ausführung von einem nicht leeren case Abschnitt in den nächsten Abschnitt übergeht. Jeder Abschnitt, der Code enthält, muss mit einer break (oder einer anderen Sprunganweisung, wie z. B. return oder goto) enden. Diese Regel verhindert, dass versehentliche Fehler auftreten, die in diesen Sprachen auftreten.
Testen von Mustern mit case und when
Eine case Bezeichnung ist nicht auf Konstantenwerte beschränkt. Es kann ein Muster testen, bei dem es sich um eine Regel handelt, die das Shape oder den Wert von Daten beschreibt. Ein relationales Muster wie < 0 entspricht jedem Wert kleiner als null. Fügen Sie eine when-Klausel hinzu, um eine zusätzliche Bedingung anzufügen, die ebenfalls true erfüllt sein muss, damit der Fall zutrifft:
int measurement = 42;
// A case label can test a pattern instead of a constant. A when clause
// adds a condition that must also be true for the case to match.
switch (measurement)
{
case < 0:
Console.WriteLine("Negative");
break;
case 0:
Console.WriteLine("Zero");
break;
case > 0 when measurement % 2 == 0:
Console.WriteLine("Positive and even"); // => Positive and even
break;
default:
Console.WriteLine("Positive and odd");
break;
}
Musterbasierte Fälle werden von oben nach unten ausgewertet, sodass spezifischere Muster vor allgemeineren gehören. Den vollständigen Musterkatalog finden Sie unter Musterabgleich.
Wählen Sie mithilfe eines Ausdrucks einen Wert aus.
Die if- und switch-Anweisungen entscheiden, welcher Code ausgeführt wird. Wenn Sie stattdessen einen Wert auswählen müssen, verwenden Sie einen Ausdruck. Ein Ausdruck ergibt einen Wert, daher können Sie ihn überall dort verwenden, wo ein Wert erwartet wird, z. B. auf der rechten Seite einer Zuweisung oder als Methodenargument. C# bietet Ausdrucksformulare, die einen Wert aus Alternativen auswählen, z. B. den bedingten Operator und den switch Ausdruck.
Bedingter Operator ?:
Der bedingte Operator ?: wählt einen von zwei Werten basierend auf einer booleschen Bedingung aus.
Informationen zur Syntax, zum Kurzschlussverhalten und Anleitungen zur Entscheidung für diese anstelle von if/else finden Sie unter Bedingter Operator ?:.
switch-Ausdruck
Ein switch Ausdruck ist der Ausdruck, der der switch Anweisung entspricht. Anstatt Code für den übereinstimmenden Fall auszuführen, wird er als Wert ausgewertet. Es ist präziser als das Zuweisen eines Werts in jedem Arm einer switch Anweisung, und der Compiler warnt Sie, wenn die Arme nicht alle möglichen Eingaben abdecken. Der switch Ausdruck ist ein Kernteil des Musterabgleichs. Informationen dazu, wann und wie dieses Feature verwendet wird, finden Sie unter Mustervergleich sowie in der Referenz für den Ausdruck switch.