Partager via


switch (Référence C#)

L'instruction switch est une séquence de contrôle qui sélectionne une section switch à exécuter dans une liste de candidats.

Une instruction switch inclut une ou plusieurs sections de commutation. Chaque section switch contient un ou plusieurs noms de cas suivis d'une ou de plusieurs instructions. L'exemple suivant montre une instruction switch simple qui a trois sections switch. Chaque section switch a un nom de cas, tel que case 1 et une liste de deux instructions.

int caseSwitch = 1;
switch (caseSwitch)
{
    case 1:
        Console.WriteLine("Case 1");
        break;
    case 2:
        Console.WriteLine("Case 2");
        break;
    default:
        Console.WriteLine("Default case");
        break;
}

Notes

Chaque nom de cas spécifie une valeur de constante. L'instruction switch transfère le contrôle à la section switch dont l'étiquette case correspond à la valeur de l'expression switch (caseSwitch dans l'exemple). Si aucun nom de cas ne contient de valeur correspondante, le contrôle est transféré vers la section default, s'il y en a une. S'il n'y a aucune section default, aucune action n'est effectuée et le contrôle est transféré à l'extérieur de l'instruction switch. Dans l'exemple précédent, les instructions dans la première section commutateur sont exécutées car case 1 correspond à la valeur caseSwitch.

Une instruction switch peut inclure plusieurs sections commutateur, et chaque section peut contenir une ou plusieurs étiquettes case (comme indiqué dans l'exemple d'étiquettes case de chaîne ci-dessous). Toutefois, aucun nom avec deux cas ne peut contenir la même valeur de constante.

L'exécution de la liste d'instructions dans la section switch sélectionnée commence par la première instruction et continue par la liste d'instructions, en général jusqu'à ce qu'une instruction de saut soit atteinte, comme break, goto case, return ou throw. À ce stade, le contrôle est transféré hors de l'instruction switch ou vers un autre nom de cas.

À la différence de C++, C# ne permet pas à l'exécution de passer d'une section switch à la suivante. Le code suivant génère une erreur.

switch (caseSwitch)
{
    // The following switch section causes an error.
    case 1:
        Console.WriteLine("Case 1...");
        // Add a break or other jump statement here.
    case 2:
        Console.WriteLine("... and/or Case 2");
        break;
}

C# requiert que la fin des sections commutateur, y compris la dernière, soit inaccessible. Autrement dit, contrairement à d'autres langages, votre code ne peut pas passer dans la section switch suivante. Bien que cette obligation soit généralement remplie à l'aide d'une instruction break, le cas suivant est également valide, car il assure que la fin de la liste d'instruction ne peut pas être atteinte.

case 4:
    while (true)
        Console.WriteLine("Endless looping. . . .");

Exemple

L'exemple suivant illustre les exigences et les fonctionnalités d'une instruction switch.

class Program
{
    static void Main(string[] args)
    {
        int switchExpression = 3;
        switch (switchExpression)
        {
            // A switch section can have more than one case label. 
            case 0:
            case 1:
                Console.WriteLine("Case 0 or 1");
                // Most switch sections contain a jump statement, such as 
                // a break, goto, or return. The end of the statement list 
                // must be unreachable. 
                break;
            case 2:
                Console.WriteLine("Case 2");
                break;
                // The following line causes a warning.
                Console.WriteLine("Unreachable code");
            // 7 - 4 in the following line evaluates to 3. 
            case 7 - 4:
                Console.WriteLine("Case 3");
                break;
            // If the value of switchExpression is not 0, 1, 2, or 3, the 
            // default case is executed. 
            default:
                Console.WriteLine("Default case (optional)");
                // You cannot "fall through" any switch section, including
                // the last one. 
                break;
        }
    }
}

Dans l'exemple final, la variable chaîne, str et les étiquettes case de chaîne contrôlent le flux d'exécution.

class SwitchTest
{
    static void Main()
    {
        Console.WriteLine("Coffee sizes: 1=small 2=medium 3=large");
        Console.Write("Please enter your selection: ");
        string str = Console.ReadLine();
        int cost = 0;

        // Notice the goto statements in cases 2 and 3. The base cost of 25 
        // cents is added to the additional cost for the medium and large sizes. 
        switch (str)
        {
            case "1":
            case "small":
                cost += 25;
                break;
            case "2":
            case "medium":
                cost += 25;
                goto case "1";
            case "3":
            case "large":
                cost += 50;
                goto case "1";
            default:
                Console.WriteLine("Invalid selection. Please select 1, 2, or 3.");
                break;
        }
        if (cost != 0)
        {
            Console.WriteLine("Please insert {0} cents.", cost);
        }
        Console.WriteLine("Thank you for your business.");
    }
}
/*
    Sample Input: 2

    Sample Output:
    Coffee sizes: 1=small 2=medium 3=large
    Please enter your selection: 2
    Please insert 50 cents.
    Thank you for your business.
*/

Spécification du langage C#

Pour plus d'informations, voir la Spécification du langage C#. La spécification du langage est la source de référence pour la syntaxe C# et son utilisation.

Voir aussi

Référence

Mots clés C#

switch, instruction (C++)

if-else (référence C#)

Concepts

Guide de programmation C#

Autres ressources

Référence C#