C#.NETDébutantPattern MatchingTutoriel

Switch et pattern matching en C# : guide pratique

Comprenez le switch classique, les switch expressions et le pattern matching moderne pour écrire des décisions C# plus lisibles.

Yva Hajatiana
15 octobre 2017
3 min de lecture
Partager :X / TwitterLinkedIn
Switch expression et pattern matching en C#

Quand une décision dépend de plusieurs valeurs possibles d’une même donnée, un switch exprime souvent l’intention plus clairement qu’une longue suite de if/else.

Le switch classique

switch (choix)
{
    case 1:
        Console.WriteLine("Problème de démarrage");
        break;
    case 2:
        Console.WriteLine("Problème réseau");
        break;
    default:
        Console.WriteLine("Choix inconnu");
        break;
}

Le default traite toutes les valeurs non prévues. En C#, une section non vide ne peut pas tomber implicitement dans la suivante : elle se termine généralement par break, return ou throw.

Regrouper plusieurs valeurs

Dans une instruction switch, plusieurs étiquettes peuvent partager le même traitement :

switch (choix)
{
    case 2:
    case 3:
        Console.WriteLine("Priorité haute");
        break;
}

Retourner une valeur avec switch expression

Lorsque chaque cas sert à calculer une valeur, utilisez une expression switch :

string priorite = choix switch
{
    1 => "CRITIQUE",
    2 or 3 => "HAUTE",
    4 or 5 => "MOYENNE",
    9 => "STANDARD",
    _ => "INCONNUE"
};

Le symbole _ représente le cas par défaut. Chaque branche retourne une valeur compatible avec le type attendu.

Ajouter des conditions avec when

Le pattern matching permet de combiner structure et condition :

string niveau = montant switch
{
    < 0 => "Invalide",
    >= 500 when estMembre => "Premium fidélité",
    >= 500 => "Premium",
    >= 200 => "Standard",
    _ => "Essentiel"
};

L’ordre reste important : une branche générale placée trop tôt rendrait une branche plus précise inaccessible ou inutile.

Instruction ou expression ?

BesoinForme conseillée
exécuter plusieurs actions par casinstruction switch
calculer une valeurexpression switch
tester deux possibilités simplesopérateur ternaire
comparer des critères indépendantsif/else

Exemple : priorité d’un ticket

Console.Write("Choisissez un incident (1 à 5) : ");

if (!int.TryParse(Console.ReadLine(), out int choix))
{
    Console.WriteLine("Saisie invalide.");
    return;
}

string priorite = choix switch
{
    1 => "Critique",
    2 or 3 => "Haute",
    4 or 5 => "Moyenne",
    _ => "Inconnue"
};

Console.WriteLine($"Priorité : {priorite}");

Erreurs fréquentes

  • oublier le cas par défaut lorsqu’une valeur inattendue reste possible ;
  • choisir une instruction switch uniquement pour affecter une variable ;
  • placer un pattern général avant un pattern plus précis ;
  • surcharger une expression switch avec des traitements ayant des effets de bord.

Épisode précédent : conditions en C#. Épisode suivant : les boucles en C#.

Mots-clés :C#.NETDébutantPattern MatchingTutoriel
Y

Yva Hajatiana

Articles techniques sur l'ingénierie logicielle, .NET, le cloud et l'intelligence artificielle appliquée aux applications.