Heim >Backend-Entwicklung >C++ >Wie kann ich Fallthrough-Verhalten in den Switch-Anweisungen von C# erreichen?

Wie kann ich Fallthrough-Verhalten in den Switch-Anweisungen von C# erreichen?

Patricia Arquette
Patricia ArquetteOriginal
2025-01-04 22:13:461010Durchsuche

How Can I Achieve Fallthrough Behavior in C#'s Switch Statements?

Fallthrough von Switch-Anweisungen in C# verstehen

In C# ermöglichen Switch-Anweisungen die Steuerung des Programmflusses basierend auf dem Wert einer bestimmten Variablen. Herkömmlichen if/else-Konstrukten fehlt jedoch die Fähigkeit, verschiedene Fälle zu „durchfallen“, wie dies bei switch-Anweisungen der Fall ist.

Betrachten Sie das folgende Beispiel, in dem versucht wird, eine Zahl in ihre Wortdarstellung umzuwandeln:

static 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;
}

Wenn dieser Code kompiliert wird, schlägt er mit Fehlern fehl, die darauf hinweisen, dass die Kontrolle nicht von einem Fall auf einen anderen übertragen werden kann. Dieses Problem ergibt sich aus der Tatsache, dass in C# eine Switch-Anweisung nach jedem Fall explizite Unterbrechungen erfordert, um sicherzustellen, dass der Ausführungsfluss kontrolliert wird.

Fallthrough erreichen

Zu Um einen Fallthrough in einer Switch-Anweisung zu erreichen, gibt es drei Optionen:

  1. Leere Fälle: Ein Fall kann leer gelassen werden, was effektiv einen Übergang zum nächsten Fall ermöglicht, ohne dass Code ausgeführt werden muss.
  2. Gehe zu Fall: Die Syntax „Gehe zu Fall“ kann verwendet werden, um die Steuerung explizit auf einen bestimmten Fall zu übertragen.
  3. Goto default: Die Goto-Default-Syntax überträgt die Steuerung auf den Standardfall, auch wenn der aktuelle Fall nicht gleich ist Standard.

Beispiel mit Fallthrough

Die folgende modifizierte Version der NumberToWords-Funktion verwendet die Goto-Case-Syntax, um Fallthrough zu erreichen:

static 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]);
            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 case 1;
        case 1:
            int o = number % 10;
            ans += numbers[o];

            break;
        default:
            throw new ArgumentException("number");
    }
    return ans;
}

Das obige ist der detaillierte Inhalt vonWie kann ich Fallthrough-Verhalten in den Switch-Anweisungen von C# erreichen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
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