Essayez d'attraper enfin: Faire quelque chose si aucune exception n'est levée
Je me demandais, est-il un moyen de seulement l'exécution d'un bloc si aucune exception n'a été jeté?
Le mieux que je puisse vous arriver, c'est ça:
bool exception = false;
try{
//something
}catch(Exception e){
exception = true;
}finally{
if(!exception){
//i can do what i want here
}
}
Est-il un meilleur moyen?
- Avez-vous des "retour" au sein de votre bloc try ?
- Les réponses ont 18 votes entre eux et la question 1 vote?
- aucun retour
- Bonne (au moins) des réponses à un pas-si-bonne question, où est le problème?
Vous devez vous connecter pour publier un commentaire.
Sûr qu'il y est: le mettre au fond de la
try
bloc.Ce n'est pas totalement équivalent à celui de votre code d'origine dans le sens que si "ce que vous voulez", lance, à l'exception seront pêchés localement (ce qui ne devrait pas arriver avec votre système d'origine). C'est quelque chose que vous pourrait ou ne pourrait pas se soucient, et il ya une bonne chance que cette différence de comportement est également le bon.
Si vous souhaitez apporter de l'ancien comportement de retour, vous pouvez également utiliser cette variante qui ne nécessite pas un
finally
juste pour le plaisir de l'écriture du "si pas d'exceptions" condition:return
une solution pratique, car elle suppose moyen trop à propos de ce que la méthode n'est donc pas applicable dans le cas général.Pouvez-vous la structure de votre code que l'
doSomething
est la dernière instruction du bloc et il ne jette pas?Vous n'avez pas besoin de la clause finally.
Une solution :
Habituellement, vous devrez simplement un retour dans votre clause catch, de sorte que vous n'avez même pas à tester :
ou (selon le cas d'utilisation et généralement moins évident, surtout si vous avez plus d'une exception prévue - vous ne voulez pas avoir des try-catch imbrications...) :
Oui, il y a:
la mettre à la fin du bloc try 🙂
Nan - ce que vous avez est probablement la meilleure façon de le faire en C#.
C'est en supposant que:
try
bloc. (Peut-être parce que vous ne voulez pas que les exceptions dans le code pour être traitées par le principalcatch
bloc.)try...catch...finally
structure. (Peut-être parce que vous voulez que le code à exécuter devant un autre code qui est assis à l'intérieur de lafinally
bloc.)Alors qu'il n'y a rien de mal avec votre code, il n'est pas nécessaire. Il suffit de mettre le code que vous voulez exécuter dans le bas du bloc try:
Je crois que vous êtes à la recherche pour un essai à l'intérieur de votre essayer:
Bien que cela soit généralement considéré comme une mauvaise pratique, je l'aime plus que le drapeau de la version.