Cette question est plus une question de savoir quelle est la bonne façon de faire quelque chose ...
La question ... Y a-t-il un ordre de nidification approprié entre un est-il ok pour nier l'ensemble de l'ensemble ou si vous nichez le est ... p> moins / plus correct que ... P > en utilisant code> bloc et un
Essayez / attraper code>? p>
à l'aide de code> instruction à l'intérieur d'un
essayer / attraper code> et maintenir les avantages d'un
en utilisant le bloc code>? (Ou une exception entraînera une exception la partie de fermeture de l'instruction utilisant l'utilisation de la fenêtre) p>
essayer / attraper code> à l'intérieur du
en utilisant Code> Les déclarations et entourent uniquement les affirmations qui accédent à la base de données? p>
using( tsmtcowebEntities db = new tsmtcowebEntities() ) {
try {
violationList = ( from a in db.DriverTrafficViolationDetails
where a.DriverTrafficViolation.DriverApplicationId == DriverAppId
orderby a.DateOfOccurance descending
select a ).ToList<DriverTrafficViolationDetail>();
GeneralViolation = ( from a in db.DriverTrafficViolations
where a.DriverApplicationId == DriverAppId
select a ).FirstOrDefault();
} catch { }
}
4 Réponses :
Je suggérerais de placer l'essai / attraper dans l'utilisation car, que, quelles que soient une exception ou non, vous devez disposer de types le conteneur d'entité jetable P>
Je suppose que cela faisait partie de ma question. J'étais 100% positif dans la fonctionnalité de la nidification de l'essai / attraper à l'intérieur de l'utilisation. J'étais plus sûr si une déclaration utilisée pouvait gérer l'inverse et je dispose toujours de l'objet / des ressources ... J'ai du code que je travaille sur et c'est actuellement à la fois. J'essaie de savoir si j'ai besoin de passer par le code et de vous assurer que l'essai / capture est toujours imbriqué ou non. Vous avez confirmé ce que j'attendais à l'origine, je vais donc accepter la réponse! @Glennferrielive
en utilisant code> fait son propre essai. Le
Dispose code> sera toujours appelé.
-1 Dispose sera appelé quel que soit la nidification. @Jaré: L'utilisation est compilée à un essai-enfin (pas d'essais comme J.n. dit). Disposer est appelé dans le bloc enfin, il est donc appelé si l'exception est ou non prise ou manipulée.
Hwy - Guy qui m'a donné le (-1) ... Pensez-vous que l'essai attraper devrait encapsuler l'utilisation du bloc? Quel @phoog?
J'ai donné -1 parce que votre réponse implique que si l'utilisation est placée dans la prise try, et une exception est lancée, qui disposent de ne pas être appelée. Cette implication est incorrecte.
Cela ne répond pas à ma question ... @Phoog
@Glennferrielive quelle question? Est-ce que je pense que l'essai attraper devrait encapsuler l'utilisation du bloc? Pas particulièrement, mais en général, il y a des cas où quelqu'un pourrait vouloir enfermer un bloc d'utilisation dans un bloc d'essai.
C'est vraiment une question de style et à quel point vous souhaitez limiter la portée de Si l'utilisation est à l'intérieur du bloc Essayer / Catch, la variable Si l'utilisation est en dehors du bloc ESSAY / CATTER, il sera visible dans la partie capture. P>
Quoi qu'il en soit, la variable sera éliminée correctement car l'utilisation de bloc est l'équivalent d'un essai / enfin. P>
Personnellement, je me demanderais pourquoi vous devez prendre des exceptions du tout et quoi, si quelque chose, vous êtes capable de les faire avec eux. p> dB code>: p>
db code> ne sera accessible que dans la partie try. p>
J'utilise fréquemment l'essai / capture pour définir un code d'état pour la réponse sur mes actions appelées par Ajax.
Le plus tard est meilleur: il évitera de masquer des exceptions éventuellement lancées DY Dispose code>. Voir cette article. p>
+1 pour le pointant sur cette sortie: toutefois, tout dispositif qui jette une exception est déjà "mauvais" dans mon livre :(
Sauf si vous voulez explicitement attraper des erreurs projetées par l'utilisation de l'utilisation. Quelque chose comme en utilisant (filtream fs = nouveau filtream (... peut jeter facilement si le chemin est invalide ou inaccessible, et peut même être plus susceptible de lancer que le contenu de votre utilisation de votre utilisation.
La question est alors: quand em> si le saisir em> être exécuté en relation avec le (aussi, les blocs de capture vides sont Icky! Je suppose qu'ils sont là "à des fins de démonstration".) p>
codage heureux. p>
* Notez qu'une capture extérieure attrapera des exceptions projetées à partir de en utilisant code> nids de manière prévisible avec
ESSAY / CATCH CODE> et
Dispose code> sera appelé tout sur les chemins. Signifie prévisible le contrôle toujours em> flux des étendues interne-> extérieures (pour les exceptions et le retour de flux normal). P>
Dispose code> et ce que em> devrait La portée des attrape em> est? La réponse à cela variera par le code mais doit évidemment être "à l'intérieur" si l'accès à
dB code> est requis et "à l'extérieur" si le code exécuté dans le cadre de em> le
en utilisant code> * pourrait être la source de l'exception. p>
NOUVELLES TSMTCowebentities () code> ou (comme indiqué par J.N.) Le
Dispose code>, doit-il exister. (C'est un autre sujet entièrement s'il est acceptable pour la construction de la construction d'une exception ;-) Je préfère attraper des exceptions aussi proches de la source que possible et laisser des exceptions que je ne sais pas comment traiter "saignement" non décourgés > sauf em> dans certaines constructions de niveau supérieur (par exemple, des gestionnaires d'événements). P>
Je les ai en fait quelques endroits dans mon code simplement parce que j'ai elmah fixé pour attirer une exception. Sur ma liste de TODO, consiste à reprendre et à reporter beaucoup de code et que mes blocs Essayer / Catch sont l'un de ces domaines et améliorer la configuration de la journalisation des erreurs que j'ai.
Avez-vous vraiment besoin de tous les détails de votre application dans le code fourni? Je pense qu'un exemple de maquillage simple suffirait.
Le bloc de capture vide est une pratique de programmation extrêmement mauvaise. Ne le faites pas! Vous le regretterez plus tard.
@Jonathonreinhart, il était plus simple pour moi de copier et collez un bloc de code que de composer un exemple. Je suppose que le code quand je pense que mettre le code là-bas pour que le monde puisse être mauvais. Dans ce cas, je ne vois pas de négatifs alors pourquoi pas?
@phoog La plupart des endroits dans mon code, je pose le bloc de capture d'une impression d'entité, mais j'utilise aussi Elmah pour vous connecter à toutes mes exceptions, donc je suis informé de toutes les exceptions quelle que soit la façon dont je remplis le bloc de capture. Cela peut ne pas être la bonne façon de le faire, mais cela fonctionne pour moi pour le moment et si j'ai besoin de plus de détails supplémentaires que
exception code> ne fournissent pas que j'entre et l'ajoutez. Sur ma liste de choses à faire, c'est beaucoup de ré-adapter du code, mais ils veulent le projet dès que possible, donc je dois couper des coins où je peux et noter où j'ai besoin de revenir en arrière et de réparer les choses une fois qu'il est là-bas.
@Jaré, de plus que tout le monde ait à lire, quand il n'est pas pertinent.