Langage C# – Les filtres d’exception

La version 6 du langage C# a proposé les filtres d’exception, qui permettent d’ajouter une condition sous forme d’expression booléenne, sur les clauses catch des gestionnaires d’exception. Voici un exemple :

try
{
    var i = int.Parse("123487894949");
}
catch (OverflowException ex) when (ex.Data != null)
{
    Console.WriteLine($"Erreur de conversion de données : {ex.Data}");
}

A la première lecture, on pourrait se dire que cette implémentation est équivalente à celle-ci :

try
{
    var i = int.Parse("123487894949");
}
catch (OverflowException ex)
{
    if (ex.Data != null)
    {
        Console.WriteLine($"Erreur de conversion de données : {ex.Data}");
    }
    else
    {
        throw;
    }
}

Ces deux implémentations n’ont pas le même comportement. Avec le filtre d’exception, la pile des environnements des méthodes exécutées (contenant la signature des méthodes et leurs variables locales – attention, ne pas confondre avec la Stack Trace, la trace de la pile -) n’est pas déroulée si la condition spécifiée n’est pas satisfaite. La condition permet de ne pas entrer dans le bloc catch et a un impact lors du débogage du code. Dans la seconde implémentation, seul le type de l’exception est pris en compte.

About: James RAVAILLE

Travaillant avec la plateforme Microsoft .NET depuis 2002, j’alterne les missions de formation et d’ingénierie avec cette plateforme. J’écris ce blog pour transmettre mes connaissances à tout développeur, qu’il soit débutant ou expérimenté.