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 :
[cc lang= »C# »]
try
{
var i = int.Parse(« 123487894949″);
}
catch (OverflowException ex) when (ex.Data != null)
{
Console.WriteLine($ »Erreur de conversion de données : {ex.Data} »);
}
[/cc]

A la première lecture, on pourrait se dire que cette implémentation est équivalente à celle-ci :
[cc lang= »C# »]
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;
}
}
[/cc]

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.

Étiquettes :

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é.