Je veux fusionner les blocs de capture dans le code suivant pour les raisons de réutilisation du code: à quelque chose comme ceci: p> Est-ce possible en quelque sorte? P> merci. P> p>
3 Réponses :
Non (ou au moins: non si les exceptions que vous souhaitez regrouper se produire em> pour partager une classe de base commune spécifique à ce groupe, qu'ils ne font pas dans votre exemple); La seule chose que vous pouvez faire dans ce scénario est Je serais tenté de modifier le Espacement afin que je puisse me concentrer sur le code fort> fort p> p> (ou quelque chose). p> à certains égards, cela lie aussi Dans cette question: Idée de correspondance / motif de motif . p> p> attrape (exception ex) code> et effectuez des tests d'exécution sur
ex code>. Au moment où vous avez fait cela, je m'attends à ce que votre code soit déjà «plus jolie» tel quel (car, surtout, vous avez déjà refacturé le code de traitement dans une méthode).
Vous ne pouvez faire que quelque chose comme ça si vous aviez une hiérarchie décente d'exceptions, vous pourriez alors attraper une exception d'un type de plus haut dans la hiérarchie. Cependant, des hiérarchies d'exception sont censées être assez peu profondes par la conception et il n'ya aucune garantie que vous voudriez gérer les exceptions de la même manière basées uniquement sur la hiérarchie. Et en plus ... rien de tout cela aiderait avec les types d'exception standard utilisés dans votre exemple. P>
Vraisemblablement, vous le faites dans plus d'un endroit. Si oui, pourquoi ne faites-vous pas cela:
{ DoSomeInputOutput(); } catch (Exception ex) { HandleInputException(ex); } void HandleInputException(Exception ex) { if (ex is InvalidOperationException || ex is InvalidDataException || ex is ArgumentNullException) { HandleKnownException1 (ex); } else if ... else if ... }