9
votes

Fusionner des blocs de capture avec exactement le même code?

Je veux fusionner les blocs de capture dans le code suivant pour les raisons de réutilisation du code: xxx

à quelque chose comme ceci: xxx

Est-ce possible en quelque sorte?

merci.


0 commentaires

3 Réponses :


5
votes

Non (ou au moins: non si les exceptions que vous souhaitez regrouper se produire 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 attrape (exception ex) et effectuez des tests d'exécution sur ex . 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).

Je serais tenté de modifier le Espacement afin que je puisse me concentrer sur le code fort xxx

(ou quelque chose).

à certains égards, cela lie aussi Dans cette question: Idée de correspondance / motif de motif .


0 commentaires

1
votes

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.


0 commentaires

7
votes

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 ...
}


0 commentaires