Fallthrough-Verhalten in C#-Switch-Anweisungen
In C# ermöglichen Switch-Anweisungen die sequentielle Ausführung von Code, wenn mehrere Fälle übereinstimmen. Allerdings erfordern Switch-Anweisungen standardmäßig eine explizite Break-Anweisung am Ende jedes Falls, um unerwartetes Verhalten zu verhindern.
Betrachten Sie das folgende Codebeispiel:
string NumberToWords(int number) { string[] numbers = new string[] { "", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine" }; string[] tens = new string[] { "", "", "twenty", "thirty", "forty", "fifty", "sixty", "seventy", "eighty", "ninety" }; string[] teens = new string[] { "ten", "eleven", "twelve", "thirteen", "fourteen", "fifteen", "sixteen", "seventeen", "eighteen", "nineteen" }; string ans = ""; switch (number.ToString().Length) { case 3: ans += string.Format("{0} hundred and ", numbers[number / 100]); case 2: int t = (number / 10) % 10; if (t == 1) { ans += teens[number % 10]; break; } else if (t > 1) ans += string.Format("{0}-", tens[t]); case 1: int o = number % 10; ans += numbers[o]; break; default: throw new ArgumentException("number"); } return ans; }
Dieser Code versucht, a zu konvertieren Zahl zu seiner String-Darstellung. Die switch-Anweisung löst jedoch einen Fehler aus, der besagt, dass die Steuerung nicht von Fall 3 auf Fall 2 und von Fall 2 auf Standard umfallen kann. Der Grund dafür ist, dass in C# Switch-Anweisungen explizite Unterbrechungen erfordern, um die unbeabsichtigte Ausführung nachfolgender Fälle zu verhindern.
Um Fallthrough-Verhalten zu erreichen, kann man die spezielle Goto-Case-Syntax verwenden. So kann es im Beispiel implementiert werden:
switch (number.ToString().Length) { case 3: ans += string.Format("{0} hundred and ", numbers[number / 100]); goto case 2; case 2: int t = (number / 10) % 10; if (t == 1) { ans += teens[number % 10]; break; } else if (t > 1) ans += string.Format("{0}-", tens[t]); goto default; case 1: int o = number % 10; ans += numbers[o]; break; default: throw new ArgumentException("number"); }
In diesem modifizierten Code ermöglicht das Schlüsselwort „goto case“, dass die Ausführung zum nächsten Fall übergeht, ohne dass eine explizite break-Anweisung erforderlich ist. Durch das Hinzufügen eines „goto case 2“ nach case 3 wird der Code unter diesem case (der Zehner und Einsen umwandelt) unabhängig von der Länge der eingegebenen Zahl ausgeführt. In ähnlicher Weise stellt das Hinzufügen von goto default nach Fall 2 sicher, dass der Standardfall immer ausgeführt wird.
Dieses Fallthrough-Verhalten kann in bestimmten Situationen wünschenswert sein, beispielsweise bei der Umwandlung von Ziffern in ihre entsprechenden Wortdarstellungen im bereitgestellten Beispiel. Es ist jedoch wichtig, es mit Bedacht und Vorsicht zu verwenden, da ein unachtsamer Ausfall zu komplexem und fehleranfälligem Code führen kann.
Das obige ist der detaillierte Inhalt vonWie funktioniert das Fallthrough-Verhalten in C#-Switch-Anweisungen und wann sollte „goto case' verwendet werden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!