10
votes

C # Devrais-je faire une boucle jusqu'à aucune exception?

Je veux aller une fois à travers une boucle, mais seulement si une exception est levée, retournez à travers la boucle. Comment j'écrirais cela en C #?

merci


2 commentaires

Ce n'est pas clair pour moi ce que tu veux dire. Pourquoi ne postez-vous pas de code, dites-vous ce que vous voulez que le résultat soit et ce qui arrive réellement.


Je me demande si le plan est de boucler, et s'il y a une exception, ignorez l'objet problématique et continuez la boucle, mais c'est juste une supposition.


7 Réponses :


24
votes

Cette odeur de mauvais design pour moi. La règle générale est la suivante: les exceptions doivent pas être utilisées pour le contrôle de flux. Il ya un certain nombre de raisons à cela; À savoir, il existe généralement des méthodes de meilleure qualité / plus fiables pouvant être utilisées pour vérifier les choses avant que des exceptions soient jetées, et diminue également l'efficacité.

Néanmoins, juste pour des arguments, vous pouvez faire quelque chose comme ce qui suit: < / p> xxx

à nouveau - c'est pas la voie recommandée. Je serais heureux de suggérer quelque chose de mieux si vous pouviez fournir un peu plus de contexte / exemples /


3 commentaires

Je peux penser à certaines circonstances où ce n'est pas intrinsèquement mauvais (par exemple, réessayer une opération de réseau floconneux sur une exception de délai d'attente), mais pas beaucoup.


Peut-être que le système est basé sur la réponse de la base de données et vous devez l'attendre jusqu'à ce qu'il fonctionne!


C'est une bonne réponse que la réponse acceptée réelle



2
votes

Cela dépend vraiment de ce que vous faites et du type d'exception étant jeté. De nombreuses exceptions ne sont pas quelque chose qui ne serait pas corrigée en essayant à nouveau avec exactement les mêmes entrées / données, et ainsi que la boucle permettrait de générer l'exception annonce infinitum.

Au lieu de cela, vous devriez vérifier les exceptions pertinentes, puis les gérer de manière appropriée pour ces exceptions particulières.


0 commentaires

0
votes

Pourquoi ne pas appeler une fonction qui fait en réalité la boucle et une prise après cela qui appellerait la fonction à nouveau.

try {
  loop();
} catch(Exception e) {
  loop();
}


1 commentaires

Ceci est problématique si l'exception est lancée à nouveau la deuxième fois.



0
votes

semble être une mauvaise idée, mais quand même, essayez quelque chose comme ceci:

supprimé


1 commentaires

Ce code ne reviendra pas à travers la boucle si une exception est lancée. En fait, le code ajouté ne réalise rien exactement rien.



0
votes

Quelque chose comme: xxx

comme ndolorin dit, ça sent un mauvais design. Vous utilisez des exceptions pour contrôler le flux du programme. Mieux vaut avoir des contrôles explicites pour les conditions qui vous feront répéter l'opération.


0 commentaires

6
votes

Qu'en est-il de ce qui suit où vous pouvez définir un décompte de tentative: xxx


0 commentaires

0
votes

alors j'utilise ce type simple: d xxx

espère qu'il aide :)


0 commentaires