Pattern Matching en C# : un code plus lisible et élégant
Si vous avez déjà écrit des conditions imbriquées ou des vérifications complexes en C#, il est possible que le pattern matching soit votre meilleur allié pour rendre votre code plus lisible et élégant.
Plus besoin de vérifier chaque propriété une par une, ni de gérer des conditions null complexes. Le code est plus lisible, moins sujet aux erreurs et, surtout, il exprime l'intention de manière claire.
Avant / après : le property pattern
Avant
if (movie != null
&& movie.Genre == "Drama"
&& movie.Rating >= 8.0
&& movie.ReleaseYear >= 2015)
{
Console.WriteLine("Top drama since 2015.");
}
Avec le pattern matching
if (movie is { Genre: "Drama", Rating: >= 8.0, ReleaseYear: >= 2015 })
{
Console.WriteLine("Top drama since 2015.");
}
Une seule expression : le null check est implicite (is échoue si movie est null), les propriétés sont vérifiées ensemble, et la condition se lit comme une phrase.
Les switch expressions
Combiné aux switch expressions, le pattern matching remplace des arbres entiers de if/else :
var remise = client switch
{
{ Type: ClientType.Premium, Anciennete: > 5 } => 0.20m,
{ Type: ClientType.Premium } => 0.10m,
{ Commandes.Count: 0 } => 0m,
null => throw new ArgumentNullException(nameof(client)),
_ => 0.05m
};
Chaque cas tient sur une ligne, l'ordre fait office de priorité, et le compilateur vous prévient si un cas n'est pas couvert.
Quelques patterns à connaître
Les patterns relationnels et logiques : if (age is >= 18 and < 65) remplace deux comparaisons et se lit naturellement.
Le null check moderne : if (commande is not null) est plus sûr que != car il ignore les surcharges d'opérateurs.
Les list patterns (C# 11) : if (codes is [var premier, .., var dernier]) déstructure une collection en une expression.
À retenir : le pattern matching ne change pas ce que fait votre code, il change ce qu'il raconte. Une condition qui se lit comme une phrase, c'est une revue de code plus rapide et un bug de moins qui passe inaperçu.
Cet article est tiré d'une de mes publications LinkedIn : rejoignez la discussion ↗