Générale de la gestion des exceptions en C#

Je suis en cours d'exécution du code par le biais de FxCop et je suis actuellement à la recherche à la compensation de tous les non-rupture des violations.

Le code lui-même a quelques instances de blocs try/catch qui vient d'attraper les exceptions générales;

try
{
    //Some code in here that could throw an exception
}
catch(Exception ex)
{
    //Exception Thrown ... sort it out!
}

Maintenant, nous savons tous que c'est une mauvaise pratique, mais je pensais que je savais comment le faire correctement - mais FxCop a d'autres idées!

Supposons que le code dans le bloc try pourrait jeter un IO Exception - et seulement un IO exception. Il devrait y avoir rien de mal à cela:

try
{
    //Code in here that can only throw an IOException
}
catch (System.IO.IOException ioExp)
{
    //Handle the IO exception or throw it
}
catch (System.Exception ex)
{
    //Catch otherwise unhandled exception
}

Mais FxCop n'est pas d'accord avec moi ... il a encore des drapeaux cela comme une violation parce que je suis attraper System.Exception.

Est-ce vraiment une mauvaise pratique ou doit-on/peut-je ignorer cette violation?

Ça dépend... que faites-vous dans "// Catch sinon exception non gérée"?
L'application est capable d'envoyer des e-mails à notre Helpdesk - ce qui se passait au Développement - de la sorte, nous aurions probablement déclencher l'une de ces avec la trace de la pile.
Êtes-vous absolument sûr que le bloc de code ne peut pas jeter une OutOfMemoryException par exemple, ou une autre erreur fatale..?
Le ci-dessus a été hypothétique - les appels de méthode dans le code réel risque de jeter de l'un des 8 différentes exceptions. Cependant, vous pouvez jamais être sûr qu'ils sont les seuls possibles? D'où la question 😉

OriginalL'auteur DilbertDave | 2009-10-27