8

Je sais que Java impose au programmeur de lister toutes les exceptions qui seront lancées par la méthode, et ainsi de créer un moyen facile d'énumérer toutes les exceptions levées possibles pour l'utilisateur du code. D'autre part, NET n'a pas cette fonctionnalité, et il ne nous reste plus que la documentation de l'API ou la documentation XML où les exceptions sont parfois listées.Liste toutes les exceptions qui pourraient être levées par une méthode

Existe-t-il des addons pour VS qui indiquent les exceptions qu'un appel donné peut lancer? Compte tenu de la puissance de la réflexion, ne devrait-il pas être possible de regarder à travers l'appel, et regarder à travers toutes les branches de possibles passages à travers l'appel et vérifier les exceptions .NET étant levées?

+0

Et, si vous trouvez qu'il génère 3 exceptions différentes par analyse de code source, comment mettriez-vous des clauses catch dans le code pour chacune d'entre elles? – shahkalpesh

+1

La plupart des ingénieurs java ne reconnaissent plus que les exceptions vérifiées étaient une mauvaise idée? –

+2

Je pense que vous devriez résoudre le problème d'arrêt pour déterminer tous les cas où une DivideByZeroException pourrait être levée (par opposition à ceux où les invariants de classe l'empêchent) –

Répondre

8

Le seul outil que je connais est le (commercial) Exception Hunter from red-gate software.

Cependant, ce n'est pas aussi déterministe que vous pourriez le penser en premier. Selon les versions des assemblys supplémentaires utilisés, les exceptions levées peuvent varier après l'heure de génération si une version plus récente est utilisée, ce qui génère d'autres exceptions que prévu lors de la génération.

En Java, vous avez le RuntimeException "spécial" qui n'a pas à être déclaré dans la signature de la méthode (y compris toutes les exceptions qui en découlent). Il y a des raisons valables que les concepteurs de langage ont choisi de ne pas implémenter les exceptions vérifiées dans C# (si elles surpassent les avantages ou non est discutable). Certains développeurs Java enveloppent simplement les exceptions dans les exceptions d'exécution, ou oublient d'utiliser les exceptions "cause" qui entraînent une perte d'informations.

Il ya un bon interview with Anders Hejlsberg sur les exceptions vérifiées et une partie de la raison pour laquelle C# ne les a pas - Merci à adrianbanks pour le lien.

+2

Il ya une bonne interview avec Anders Hejlsberg au sujet des exceptions vérifiées et une partie du raisonnement pourquoi C# ne les a pas ici: http://www.artima.com/intv/handcuffs.html – adrianbanks

+0

@adrianbank, je sais, mais je n'avais tout simplement pas le lien sous la main. Merci de l'avoir posté! – Lucero

+0

Grand article, donne une bonne perspective sur les exeptions vérifiées pour ceux d'entre nous qui ne les ont jamais vraiment l'air dans une utilisation pratique. –

Questions connexes