J'utilise des exceptions personnalisées pour communiquer la nature de l'erreur.
Par exemple, j'aime utiliser l'exception "ArgumentNullException" fournie par le framework pour vérifier les arguments. Plus tard, lorsque je vois cette erreur, soit dans le débogueur, soit dans un journal d'erreurs, je connais immédiatement la nature de l'erreur sans avoir à lire davantage.
À l'autre extrémité du spectre se trouve l'exception InvalidOperationException, qui peut signifier à peu près n'importe quoi.
L'alternative aux exceptions personnalisées est l'envoi de messages d'erreur détaillés. C'est bien, mais créer une exception personnalisée telle que ConnectionFailed est plus significatif. Ensuite, le message lui-même peut donner plus de détails.
Lorsque je crée ces exceptions personnalisées, je n'ajoute pas de nouvelles propriétés. La raison en est que si vous avez un journal d'erreurs, vous voulez qu'il fonctionne sur toutes les exceptions. Si vous ajoutez une propriété spéciale, le collecteur d'erreurs va l'ignorer. Par exemple, si vous utilisez MSTest, lorsque vous exécutez votre test et qu'il échoue, les propriétés personnalisées ne sont pas affichées. Mais si vous vous en tenez à la propriété Message de la classe de base, l'affichage sera parfait.
La sous-classification est donc très simple :
public class NavigationException : Exception{
public NavigationException() {}
public NavigationException(string msg) : base(msg) {}
public NavigationException(string msg, Exception inner) : base(msg, inner) {}
}
C'est très simple, cela fonctionne avec n'importe quel enregistreur d'erreurs, et lorsque je le vois, je sais qu'il s'agissait d'un problème de navigation et je peux consulter les détails si nécessaire.
Greg