Emballage tout morceau de code dans un try
/catch
bloc sans une bonne raison est une mauvaise pratique.
Dans l' .NET modèle de programmation, des exceptions doivent être réservés pour des cas vraiment exceptionnels ou des conditions. Vous devez seulement pour attraper les exceptions que vous pouvez réellement faire quelque chose au sujet de. En outre, vous devriez ne devrait guère jamais attraper la base System.Exception
classe (mais préférez plutôt pour attraper les plus spécifiques, issus des classes d'exception, vous pouvez gérer). Et devrait vraiment une exception inattendue être rencontrées au cours de votre programme d'exécution, vous devriez crash.
Évidemment, la réponse "correcte" aurait du être faite au cas par cas, en fonction de ce qui se passe à l'intérieur qu' // code
de l'espace réservé dans votre catch
bloc. Mais si vous allez avoir une règle générale ou les "meilleures pratiques", vous devriez toujours avoir une raison particulière pour intercepter des exceptions, pas juste envelopper l'ensemble de votre code dans un gigantesque try
/catch
bloc comme une question de cours sans y penser.
Notez que si vous êtes tout simplement en essayant d'attraper les exceptions non gérées susceptibles de se produire aux fins de l'exploitation forestière ou d'une erreur de déclaration, vous devriez être en utilisant l' AppDomain.UnhandledException
événement. C'est une notification d'événement, afin de ne pas vous permettre de gérer ces exceptions, mais c'est le bon endroit pour mettre en œuvre votre journalisation ou les rapports d'erreurs après que votre demande est tombé en panne.
EDIT: Comme je l'ai été à rattraper le retard dans ma lecture de Raymond Chen excellent blog, "Le Vieux Chose de Nouveau", j'ai remarqué qu'il avait récemment publié un article sur un sujet similaire. C'est le propre des COM, plutôt que de la .NET Framework, mais les concepts généraux concernant le traitement des erreurs sont également applicables pour les deux environnements. Je pensais que je voudrais partager quelques joyaux de l'article ici, à l'appui de ma [apparemment très controversée] avis.
Historiquement, COM placé un géant try/except autour de votre serveur méthodes. Si votre serveur a rencontré ce qui serait normalement une exception non gérée, le géant try/except serait de l'attraper et de le transformer dans l'erreur RPC_E_SERVERFAULT
. Il a ensuite marqué l'exception comme traité, de sorte que le serveur est resté en cours d'exécution, ce qui "l'amélioration de la robustesse en gardant le serveur qui exécute même quand il a rencontré un problème."
Rappelez-vous, c'était en fait un mauvais service.
Le fait qu'une exception non gérée s'est produite signifie que le serveur a été dans un état inattendu. Par la capture de l'exception et de dire, "Ne vous inquiétez pas, c'est du tout bon," en fin de compte vous laissant un corrompu serveur en cours d'exécution.
[ . . . ]
Attraper toutes les exceptions et de laisser le processus se poursuivre l'exécution suppose qu'un serveur peut récupérer d'une panne imprévue. Mais ce qui est absurde. Vous savez déjà que le serveur est unrecoverably toast: Il s'est écrasé!
Beaucoup mieux est de laisser le crash du serveur, de sorte que le fichier de vidage sur incident peuvent être capturées sur le point de défaillance. Maintenant vous avez une chance de découvrir ce qui se passe.
Vous pouvez [et] des lire l'article en entier ici sur son blog: Comment désactiver le gestionnaire d'exceptions qui COM "utilement" s'enroule autour de votre serveur.