De retour en essayer & attraper rapport à retourner dans enfin?
Est soit l'un de ces risquée? Est-ce mieux? Ou est-ce une de ces choses vous les imprimer et d'en lancer une fléchette à décider?
Je veux le faire maintenant que je comprends comment fonctionne enfin:
try {
stuff that changes something...
}
catch (System.Exception ex) {
something.worked = false;
something.err = ex.Message;
}
finally {
stuff.close();
return something;
}
Mais j'ai vu:
try {
stuff that changes something...
return something;
}
catch (System.Exception ex) {
something.worked = false;
something.err = ex.Message;
return something;
}
finally {
stuff.close();
}
À l'exception de la première n'est pas valide en C# donc il ne peut pas être fait. Alors, comment peut-il préférable? Cette question devrait être posée à nouveau, où un code est en fait le code est valide, sinon son un peu inutile.
Oups, je voulais dire que l'ancien n'est pas légal de C#. Ce dernier est en fait valide du point de vue syntaxique.
Oups, je voulais dire que l'ancien n'est pas légal de C#. Ce dernier est en fait valide du point de vue syntaxique.
OriginalL'auteur ChuckNeuros | 2011-08-26
Vous devez vous connecter pour publier un commentaire.
Vous ne pouvez pas
return
definally
. Vous obtiendrez d'erreur du compilateur:Si l'objectif de la classe implémente
IDisposable
alors je ne serait suivante:ou
appellera
Dispose()
pour vous si ce sera nécessaire/possible.Eh bien, oui, vous devez avoir compilé. Mais ne vous punissez pas trop mal; il y a des langues où le retour de enfin est légal, et ces langues ont une assez étrange de flux de contrôle sémantique. C'est une question raisonnable, en général, pas juste pour le C#.
Je suis assez de Java est l'une de ces langues. À partir de ce que je me souviens, la plus récente
return
remplace toutes les précédentes, de sortetry { throw new BlahException(); } catch { return 1; } finally { return 2; }
retourne en fait un2
à l'appelant.La droite. JavaScript permet également les retours de enfin avec la même sémantique; la dernière déclaration gagne.
OriginalL'auteur abatishchev
Personnellement, je ne et
Également dans le
finally
déclaration, vérifier que vous avez besoin de fermer/éliminer des objets qu'ils pouvaient avoir jamais ouvert/si elles ont échoué.Voir aussi ici Est-ce une mauvaise pratique de retour dans un try catch enfin bloquer?
de retour de dans le try/catch/finally n'est pas considéré comme "programmation structurée". Je suis d'accord avec Tim et Ben.
OriginalL'auteur Tim B James
Il n'y a pas de risque dans la seconde approche. Mais il vous permet de retourner des valeurs différentes dans le cas des exceptions.
retour de la valeur d'une varible serait également vous permettre de retourner des valeurs différentes dans le cas des exceptions.
OriginalL'auteur Stephan