Maison > développement back-end > C++ > Comment fonctionne le comportement Fallthrough dans les instructions Switch C# et quand « goto case » doit-il être utilisé ?

Comment fonctionne le comportement Fallthrough dans les instructions Switch C# et quand « goto case » doit-il être utilisé ?

Linda Hamilton
Libérer: 2025-01-03 06:37:40
original
471 Les gens l'ont consulté

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

Comportement de transition dans les instructions Switch C#

En C#, les instructions switch permettent l'exécution séquentielle du code lors de la correspondance de plusieurs cas. Cependant, par défaut, les instructions switch nécessitent une instruction break explicite à la fin de chaque cas pour éviter un comportement inattendu.

Considérez l'exemple de code suivant :

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;
}
Copier après la connexion

Ce code tente de convertir un nombre à sa représentation sous forme de chaîne. Cependant, l'instruction switch génère une erreur indiquant que le contrôle ne peut pas passer du cas 3 au cas 2 et du cas 2 à la valeur par défaut. La raison en est qu'en C#, les instructions switch nécessitent des interruptions explicites pour empêcher l'exécution involontaire des cas suivants.

Pour obtenir un comportement de repli, on peut utiliser la syntaxe spéciale goto case. Voici comment cela peut être implémenté dans l'exemple :

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");
}
Copier après la connexion

Dans ce code modifié, le mot-clé goto case permet à l'exécution de passer au cas suivant, sans nécessiter une instruction break explicite. En ajoutant un goto case 2 après le cas 3, le code situé en dessous de ce cas (qui convertit les dizaines et les unités) est exécuté quelle que soit la longueur du nombre saisi. De même, l'ajout de goto default après le cas 2 garantit que le cas par défaut est toujours exécuté.

Ce comportement de repli peut être souhaitable dans certaines situations, telles que la conversion de chiffres en leurs représentations de mots correspondantes dans l'exemple fourni. Cependant, il est important de l'utiliser judicieusement et avec prudence, car une erreur imprudente peut conduire à un code complexe et sujet aux erreurs.

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal