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.

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

Exemple

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

Chaque nom de cas spécifie une valeur de constante. Le contrôle est transféré vers la section de commutateur dont le nom de cas contient une valeur de constante qui correspond à la valeur de l'expression de commutateur, caseSwitch. 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 de la première section switch sont exécutées car le nom de cas case 1 spécifie la valeur 1 et la valeur de caseSwitch est également 1.

Une instruction switch peut inclure un nombre illimité de sections switch et chaque section peut avoir un ou plusieurs noms de scénario. 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 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 de commutateur à la suivante. Le code suivant provoque 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;
}

La spécification en C# est que la fin de chaque section du sélecteur, y compris la dernière, soit inaccessible. Bien que cette obligation soit généralement remplie à l'aide d'une instruction de saut, le cas suivant est également valide, car la fin de la liste d'instruction ne peut pas être atteinte.

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

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, l'entrée de chaîne est convertie en variable de type entier, switchExp, qui est utilisée pour l'expression switch. Vous pouvez également utiliser directement la variable chaîne str. Pour ce faire, vous modifieriez les étiquettes case pour spécifier des valeurs de chaîne, comme illustré dans le code suivant.

switch(str)
{
    case "1":
        // ...
    case "2":
        // ...
}
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 switchExp = int.Parse(str);
        int cost = 0;
        switch (switchExp)
        {
            case 1:
                cost += 25;
                break;
            case 2:
                cost += 25;
                goto case 1;
            case 3:
                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, consultez 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 Statement (C++)

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

Concepts

Guide de programmation C#

Autres ressources

Référence C#

Historique des modifications

Date

Historique

Motif

Septembre 2010

« Exception » ajouté à la liste d'instructions de saut capables de terminer une section de commutateur.

Commentaires client.