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.
Selection-Anweisungen -
Die ifAnweisungen if-elseund switch Anweisungen wählen Anweisungen aus, die anhand des Werts eines Ausdrucks aus vielen möglichen Pfaden ausgeführt werden sollen. Die if Anweisung führt eine Anweisung nur aus, wenn ein bereitgestellter boolescher Ausdruck ausgewertet wird true. Mit if-else der Anweisung können Sie auswählen, welche der beiden Codepfade basierend auf einem booleschen Ausdruck folgen sollen. Die switch Anweisung wählt eine Anweisungsliste aus, die basierend auf einer Mustervergleichung mit einem Ausdruck ausgeführt werden soll.
Die C#-Sprachreferenz dokumentiert die zuletzt veröffentlichte Version der C#-Sprache. Außerdem enthält sie erste Dokumentation für Features in der öffentlichen Vorschau für die kommende Sprachversion.
In der Dokumentation werden alle Features identifiziert, die in den letzten drei Versionen der Sprache oder in der aktuellen öffentlichen Vorschau eingeführt wurden.
Tipp
Informationen dazu, wann ein Feature erstmals in C# eingeführt wurde, finden Sie im Artikel zum Versionsverlauf der C#-Sprache.
Die Anweisung if
Eine if Anweisung kann eine der folgenden beiden Formen sein:
Eine
ifAnweisung mit einemelseTeil wählt eine der beiden auszuführenden Anweisungen basierend auf dem Wert eines booleschen Ausdrucks aus, wie das folgende Beispiel zeigt:DisplayWeatherReport(15.0); // Output: Cold. DisplayWeatherReport(24.0); // Output: Perfect! void DisplayWeatherReport(double tempInCelsius) { if (tempInCelsius < 20.0) { Console.WriteLine("Cold."); } else { Console.WriteLine("Perfect!"); } }Eine
ifAnweisung ohne einenelseTeil führt ihren Text nur aus, wenn ein boolescher Ausdruck ausgewertet wirdtrue, wie im folgenden Beispiel gezeigt:DisplayMeasurement(45); // Output: The measurement value is 45 DisplayMeasurement(-3); // Output: Warning: not acceptable value! The measurement value is -3 void DisplayMeasurement(double value) { if (value < 0 || value > 100) { Console.Write("Warning: not acceptable value! "); } Console.WriteLine($"The measurement value is {value}"); }
Sie können Anweisungen verschachteln if , um mehrere Bedingungen zu überprüfen, wie das folgende Beispiel zeigt:
DisplayCharacter('f'); // Output: A lowercase letter: f
DisplayCharacter('R'); // Output: An uppercase letter: R
DisplayCharacter('8'); // Output: A digit: 8
DisplayCharacter(','); // Output: Not alphanumeric character: ,
void DisplayCharacter(char ch)
{
if (char.IsUpper(ch))
{
Console.WriteLine($"An uppercase letter: {ch}");
}
else if (char.IsLower(ch))
{
Console.WriteLine($"A lowercase letter: {ch}");
}
else if (char.IsDigit(ch))
{
Console.WriteLine($"A digit: {ch}");
}
else
{
Console.WriteLine($"Not alphanumeric character: {ch}");
}
}
Verwenden Sie in einem Ausdruckskontext den bedingten Operator ?: , um einen der beiden Ausdrücke basierend auf dem Wert eines booleschen Ausdrucks auszuwerten.
Die Anweisung switch
Die switch Anweisung wählt eine Reihe von Anweisungen aus, die basierend auf einer Mustervergleich mit einem Übereinstimmungsausdruck ausgeführt werden sollen, wie das folgende Beispiel zeigt:
DisplayMeasurement(-4); // Output: Measured value is -4; too low.
DisplayMeasurement(5); // Output: Measured value is 5.
DisplayMeasurement(30); // Output: Measured value is 30; too high.
DisplayMeasurement(double.NaN); // Output: Failed measurement.
void DisplayMeasurement(double measurement)
{
switch (measurement)
{
case < 0.0:
Console.WriteLine($"Measured value is {measurement}; too low.");
break;
case > 15.0:
Console.WriteLine($"Measured value is {measurement}; too high.");
break;
case double.NaN:
Console.WriteLine("Failed measurement.");
break;
default:
Console.WriteLine($"Measured value is {measurement}.");
break;
}
}
Im vorherigen Beispiel verwendet die switch Anweisung die folgenden Muster:
- Ein relationales Muster: Zum Vergleichen eines Ausdrucksergebnisses mit einer Konstante.
- Ein Konstantenmuster: Testen, ob ein Ausdrucksergebnis einer Konstante entspricht.
Von Bedeutung
Informationen zu den mustern, die von der switch Anweisung unterstützt werden, finden Sie unter Patterns.
Im vorherigen Beispiel wird auch der default Fall veranschaulicht. Der default Fall gibt Anweisungen an, die ausgeführt werden sollen, wenn ein Übereinstimmungsausdruck keinem anderen Fallmuster entspricht. Wenn ein Übereinstimmungsausdruck keinem Fallmuster entspricht und kein default Fall vorhanden ist, fällt das Steuerelement durch eine switch Anweisung.
Eine switch Anweisung führt die Anweisungsliste im ersten Switch-Abschnitt aus, deren Fallmuster mit einem Übereinstimmungsausdruck übereinstimmt und dessen Case Guard( falls vorhanden) ausgewertet wird true. Eine switch Anweisung wertet Groß-/Kleinschreibungsmuster in Textreihenfolge von oben nach unten aus. Der Compiler generiert einen Fehler, wenn eine switch Anweisung einen nicht erreichbaren Fall enthält. Dieser Fehler tritt auf, wenn ein Großbuchstabe den Fall bereits behandelt oder wenn das Muster nicht übereinstimmen kann.
Hinweis
Der default Fall kann an einer beliebigen Stelle in einer switch Anweisung angezeigt werden. Unabhängig von ihrer Position wird der default Fall nur ausgewertet, wenn alle anderen Fallmuster nicht übereinstimmen oder die goto default; Anweisung in einem der Switch-Abschnitte ausgeführt wird.
Sie können mehrere Fallmuster für einen Abschnitt einer switch Anweisung angeben, wie das folgende Beispiel zeigt:
DisplayMeasurement(-4); // Output: Measured value is -4; out of an acceptable range.
DisplayMeasurement(50); // Output: Measured value is 50.
DisplayMeasurement(132); // Output: Measured value is 132; out of an acceptable range.
void DisplayMeasurement(int measurement)
{
switch (measurement)
{
case < 0:
case > 100:
Console.WriteLine($"Measured value is {measurement}; out of an acceptable range.");
break;
default:
Console.WriteLine($"Measured value is {measurement}.");
break;
}
}
Innerhalb einer switch Anweisung kann das Steuerelement nicht von einem Switchabschnitt zum nächsten wechseln. Wie die Beispiele in diesem Abschnitt zeigen, verwenden Sie in der Regel die break Anweisung am Ende jedes Switch-Abschnitts, um die Kontrolle über eine switch Anweisung zu übergeben. Sie können auch die Rückgabe - und Throw-Anweisungen verwenden, um die Kontrolle über eine switch Anweisung zu übergeben. Um das Fall-Through-Verhalten nachzuahmen und das Steuerelement an einen anderen Switch-Abschnitt zu übergeben, können Sie die goto Anweisung verwenden.
Von Bedeutung
Jeder Schalterabschnitt muss mit einem break, gotooder return. Wenn Sie von einem Switchabschnitt zum nächsten wechseln, wird ein Compilerfehler generiert. Sie können jedoch mehrere Schalterbeschriftungen auf denselben Schalterabschnitt anwenden, wie case < 0: im vorherigen Beispiel. Diese bewusste Designauswahl ermöglicht eine präzise Behandlung mehrerer Fälle, die dieselbe oder interdependente Logik gemeinsam nutzen.
In einem Ausdruckskontext können Sie den switch Ausdruck verwenden, um einen einzelnen Ausdruck aus einer Liste der Kandidatenausdrücke basierend auf einer Mustervergleich mit einem Ausdruck auszuwerten.
Von Bedeutung
Unterschiede zwischen Switchausdruck und Switch-Anweisung:
- switch-Anweisung wird verwendet, um den Ausführungsfluss innerhalb eines Codeblocks zu steuern.
- switch expression is typically used in contexts of value return and value assignment, often as expression-bodied members.
- Ein Switch expression case section can't be empty, but a switch statement case section can.
Case Guards
Ein Fallmuster ist möglicherweise nicht ausdrucksstark genug, um die Bedingung für die Ausführung des Schalterabschnitts anzugeben. Verwenden Sie in einem solchen Fall einen Fallschutz. Die Bedingung muss zusammen mit einem übereinstimmenden Muster erfüllt sein. Ein Case Guard muss ein boolescher Ausdruck sein. Geben Sie einen Case Guard nach dem Schlüsselwort an, das when einem Muster folgt, wie das folgende Beispiel zeigt:
DisplayMeasurements(3, 4); // Output: First measurement is 3, second measurement is 4.
DisplayMeasurements(5, 5); // Output: Both measurements are valid and equal to 5.
void DisplayMeasurements(int a, int b)
{
switch ((a, b))
{
case (> 0, > 0) when a == b:
Console.WriteLine($"Both measurements are valid and equal to {a}.");
break;
case (> 0, > 0):
Console.WriteLine($"First measurement is {a}, second measurement is {b}.");
break;
default:
Console.WriteLine("One or both measurements are not valid.");
break;
}
}
Im vorherigen Beispiel werden Positionsmuster mit geschachtelten relationalen Mustern verwendet.
C#-Sprachspezifikation
Weitere Informationen finden Sie in den folgenden Abschnitten der C#-Sprachspezifikation:
Weitere Informationen zu Mustern finden Sie im Abschnitt "Muster und Musterabgleich " der C#-Sprachspezifikation.