Heim > Backend-Entwicklung > C++ > Wie funktioniert das Fallthrough-Verhalten in C#-Switch-Anweisungen und wann sollte „goto case' verwendet werden?

Wie funktioniert das Fallthrough-Verhalten in C#-Switch-Anweisungen und wann sollte „goto case' verwendet werden?

Linda Hamilton
Freigeben: 2025-01-03 06:37:40
Original
472 Leute haben es durchsucht

How Does Fallthrough Behavior Work in C# Switch Statements, and When Should `goto case` Be Used?

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;
}
Nach dem Login kopieren

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");
}
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage