178 votes

try/catch + à l’aide, la bonne syntaxe

Lequel :

OU

91voto

Jonathan Wood Points 26443

Je préfère la seconde. Peut ainsi intercepter les erreurs relatives à la création de l’objet ainsi.

34voto

chezy525 Points 2131

Depuis que j’utilise un bloc est juste une simplification de la syntaxe d’un bloc try/finally (MSDN), personnellement j’irais avec ce qui suit, même si je doute c’est sensiblement différente de celle de votre deuxième option :

20voto

Schultz9999 Points 2211

Il dépend. Si vous utilisez Windows Communication Foundation (WCF), using(...) { try... } ne fonctionnera pas correctement si le proxy en using déclaration d'état d'exception, c'est à dire l'Élimination de ce proxy va provoquer une autre exception.

Personnellement, je crois en un minimum de manipulation, à savoir une poignée de seule exception que vous êtes conscient de sur le point de l'exécution. En d'autres mots, si vous savez que l'initialisation d'une variable en using peut lancer une exception, je l'envelopper avec try-catch. De même, si, dans using corps quelque chose qui peut arriver, ce qui n'est pas directement liée à la variable en using, puis je l'envelopper avec un autre try de cette exception. J'utilise rarement, Exception mon catches.

Mais je ne voudrais IDisposable et using bien donc je suis peut-être biaisé.

19voto

Jeffrey L Whitledge Points 27574

Si votre instruction catch a besoin d'accéder à la variable déclarée dans une instruction d'utilisation, puis à l'intérieur est votre seule option.

Si votre instruction catch a besoin de l'objet référencé dans l'aide avant qu'il ne soit éliminé, alors à l'intérieur est votre seule option.

Si votre instruction catch prend une action de durée inconnue, comme l'affichage d'un message à l'utilisateur, et que vous souhaitez vous débarrasser de vos ressources avant que cela arrive, puis à l'extérieur est votre meilleure option.

A chaque fois que je scenerio semblables à ceci, le bloc try-catch est généralement dans une autre méthode plus haut dans la pile des appels à partir de l'utilisation. Il n'est pas typique pour une méthode pour savoir comment gérer les exceptions qui se produisent à l'intérieur comme ça.

Donc, ma recommandation est à l'extérieur-chemin à l'extérieur.

private void saveButton_Click(object sender, EventArgs args)
{
    try
    {
        SaveFile(myFile); // The using statement will appear somewhere in here.
    }
    catch (IOException ex)
    {
        MessageBox.Show(ex.Message);
    }
}

9voto

Smashery Points 13208

Les deux sont une syntaxe valide. Il vient vraiment à ce que vous voulez faire : Si vous voulez intercepter les erreurs relatives à la création/suppression de l’objet, utilisez la seconde. Si ce n’est pas le cas, utiliser le premier.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X