Maison >développement back-end >C++ >Comment puis-je obtenir un comportement de transition dans les instructions Switch de C# ?

Comment puis-je obtenir un comportement de transition dans les instructions Switch de C# ?

Patricia Arquette
Patricia Arquetteoriginal
2025-01-04 22:13:461042parcourir

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

Comprendre l'échec de l'instruction Switch en C#

En C#, les instructions switch permettent d'orienter le flux du programme en fonction de la valeur d'une variable donnée. Cependant, les constructions if/else traditionnelles n'ont pas la capacité de « passer à travers » différents cas comme le font les instructions switch.

Considérez l'exemple suivant, qui tente de convertir un nombre en sa représentation verbale :

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

Lorsque ce code est compilé, il échoue avec des erreurs indiquant que le contrôle ne peut pas passer d'un cas à l'autre. Ce problème vient du fait qu'en C#, une instruction switch nécessite des pauses explicites après chaque cas pour garantir que le flux d'exécution est contrôlé.

Réaliser Fallthrough

Pour Pour obtenir une solution de repli dans une instruction switch, il existe trois options :

  1. Cas vides : Un cas peut être laissé vide, permettant ainsi de passer au cas suivant sans aucune exécution de code.
  2. Goto case : La syntaxe goto case peut être utilisée pour transférer explicitement le contrôle à un cas spécifique.
  3. Goto default : La syntaxe goto par défaut transfère le contrôle au cas par défaut, même si le cas actuel n'est pas égal à par défaut.

Exemple avec Fallthrough

La version modifiée suivante de la fonction NumberToWords utilise la syntaxe goto case pour réaliser le fallthrough :

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

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn