CodeGym /Cours /C# SELF /L'opérateur switch classique

L'opérateur switch classique

C# SELF
Niveau 10, Leçon 3
Disponible

1. Introduction

Imagine que tu es barista dans un coffee shop super populaire. Un client arrive et te donne le nom d'une de ses cinq boissons préférées. Tu ne fais pas une analyse philosophique, tu regardes vite fait le menu et tu réagis : « Cappuccino ? Bien sûr ! Voilà ton cappuccino ! ». Si tu vérifiais chaque boisson avec un if séparé, ton code ressemblerait à une pile de tasses après le rush du midi — lourd et pas très pratique.

L'opérateur switch te permet de checker la valeur d'une variable de façon élégante et d'exécuter différentes actions selon le résultat. Il marche seulement avec certains types de données (on en parle juste après), mais pour la plupart des menus utilisateurs, des commandes simples ou la reconnaissance de statuts, c'est l'outil parfait.

2. Syntaxe du switch classique en C#

Voilà le schéma minimal :


switch (Expression) {
    case Valeur1:
        // actions
        break;
    case Valeur2:
        // actions
        break;
    ...
    default:
        // actions par défaut
        break;
}
Syntaxe classique du switch en C#

Exemple 1 : menu classique

Console.WriteLine("Choisis une boisson : 1 - Café, 2 - Thé, 3 - Cacao");
string input = Console.ReadLine();
int choice = int.Parse(input);

switch (choice)
{
    case 1:
        Console.WriteLine("Tu as choisi le café. Excellent choix !");
        break;
    case 2:
        Console.WriteLine("Le thé, c'est bien aussi.");
        break;
    case 3:
        Console.WriteLine("Le cacao, c'est pour les amateurs de cocooning !");
        break;
    default:
        Console.WriteLine("Cette boisson n'est pas au menu.");
        break;
}
  • Le bloc switch vérifie si choice est égal aux valeurs après case.
  • Après chaque option, il faut absolument mettre break; — sinon l'exécution continue sur le case suivant (on en parle juste après).
  • Le bloc default — c'est comme else; il s'active si aucun case ne correspond.

Comment fonctionne switch à l'intérieur ? — Étape par étape

  1. D'abord, l'expression entre parenthèses après switch est évaluée (dans notre exemple — la variable choice).
  2. Le programme la compare à chaque valeur indiquée (case) l'une après l'autre.
  3. Si ça correspond — les instructions de ce bloc sont exécutées. Ensuite, il y a le break, et le programme sort du bloc switch.
  4. Si aucune case ne correspond, le bloc default est exécuté (s'il existe).

Schéma visuel

Valeur de la variable case 1 case 2 case 3 default
1 +
2 +
3 +
autre +

«+» — ce bloc est exécuté

3. Quels types sont supportés par le switch classique ?

Dans la syntaxe classique (donc sans "Pattern Matching" et les nouveautés dont on parlera plus tard !) switch supporte :

  • Les types entiers simples (int, byte, char, long, short, sbyte, ushort, uint, ulong)
  • Les chaînes de caractères (string)
  • Les énumérations (enum)
  • Les caractères (char)

Exemple 2 : switch sur des chaînes

Console.WriteLine("Choisis une commande : start, stop, pause");
string command = Console.ReadLine();

switch (command)
{
    case "start":
        Console.WriteLine("Le programme est lancé !");
        break;
    case "stop":
        Console.WriteLine("Le programme est arrêté.");
        break;
    case "pause":
        Console.WriteLine("Le programme est en pause.");
        break;
    default:
        Console.WriteLine("Commande inconnue.");
        break;
}

4. Pourquoi on a besoin du break et qu'est-ce qui se passe si on l'oublie ?

Le bug le plus classique chez les débutants — oublier le break; dans un case. Voyons ce qui se passe si tu le zappes.

Exemple 3 : chute dans le bloc suivant (fall-through)

int day = 2;

switch (day)
{
    case 1:
        Console.WriteLine("Lundi");
        break;
    case 2:
        Console.WriteLine("Mardi");
    case 3:
        Console.WriteLine("Mercredi");
        break;
    default:
        Console.WriteLine("Jour inconnu");
        break;
}

Qu'est-ce qui va se passer ?

  • En entrée day = 2.
  • D'abord, la ligne : "Mardi" s'exécute
  • Pas de break — l'exécution passe direct au case 3 et affiche : "Mercredi"
  • Puis il y a le break; — sortie.

À l'écran, tu verras :

Mardi
Mercredi

C'est une erreur typique !

  • Si tu veux faire UNE SEULE action, mets break; dans chaque case.
  • Si (rarement) tu veux que plusieurs options fassent la même chose, tu peux les « coller » (voir plus bas).

5. Grouper des valeurs case

Parfois, plusieurs valeurs doivent avoir le même comportement. Pourquoi copier le même code ?

Exemple 4 : même réaction pour plusieurs case

char grade = 'B';

switch (grade)
{
    case 'A':
    case 'B':
    case 'C':
        Console.WriteLine("Validé !");
        break;
    case 'D':
    case 'E':
        Console.WriteLine("Tu peux progresser.");
        break;
    default:
        Console.WriteLine("Note invalide.");
        break;
}

Qu'est-ce qui se passe ?

  • Si grade vaut 'A', 'B' ou 'C', le premier bloc s'active : "Validé !".
  • Si 'D' ou 'E' — le deuxième bloc.
  • Sinon — default.

6. Ce qu'on peut et ne peut pas faire dans un switch classique

Tu peux :

  • Utiliser des littéraux (constantes) dans les case, par exemple : case 1:, case 'A':, case "stop":.
  • Comparer des enum (énumérations).
  • Omettre default, mais en général il est utile.

Tu ne peux pas :

  • Utiliser des variables dans les case (seulement des constantes).
  • Comparer des intervalles (case >= 5:, case x > 10: — ça marche pas !).
  • Utiliser double, float et autres valeurs à virgule — seulement des entiers, string, char, enum.
  • Mettre plusieurs valeurs séparées par une virgule dans un case (case 1, 2: ça ne marche pas ; mets plusieurs case à la suite).

7. Particularités et erreurs fréquentes

Dans les vrais projets, switch est souvent utilisé pour les menus, la gestion des statuts, des commandes, des codes d'erreur et mille autres trucs. Mais comme tout outil, il a ses subtilités.

Erreurs fréquentes :

  • Oublier le break (on en a déjà parlé).
  • Mauvais type dans l'expression du switch (genre essayer d'utiliser double).
  • Problème de casse dans les chaînes (case "Start": ne correspond pas à "start") — les strings sont sensibles à la casse !
  • Valeur non traitée (t'as oublié default, l'utilisateur tape n'importe quoi).

Piège avec les switch imbriqués
Même si tu peux tomber dessus, en général ce genre de code est galère à lire. Si tu te surprends à imbriquer des switch dans des switch, c'est peut-être le moment de sortir ton code dans une méthode à part ou même de passer à l'OOP/enum/tableau.

2
Mission
C# SELF, niveau 10, leçon 3
Bloqué
Menu le plus simple avec l'opérateur `switch`
Menu le plus simple avec l'opérateur `switch`
2
Mission
C# SELF, niveau 10, leçon 3
Bloqué
Détermination du jour de la semaine
Détermination du jour de la semaine
Commentaires
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION