Où mettre try / catch avec la déclaration "using"? [dupliquer]

Double Possible:

try/catch + utilisation, droit de la syntaxe

je voudrais try/catch ce qui suit:

        //write to file
        using (StreamWriter sw = File.AppendText(filePath))
        {
            sw.WriteLine(message);
        }

est-ce que je mets les blocs try/catch à l'intérieur de la déclaration using ou, autour de celle-ci? Ou les deux?

20
demandé sur Community 2011-05-27 01:21:49
la source

3 ответов

si votre déclaration de capture doit accéder à la variable déclarée dans une déclaration d'utilisation, alors l'intérieur est votre seule option.

si votre déclaration de capture a besoin de l'objet référencé dans l'utilisation avant qu'il ne soit éliminé, alors l'intérieur est votre seule option.

si votre déclaration catch prend une action de durée inconnue, comme l'affichage d'un message à l'utilisateur, et que vous souhaitez disposer de vos ressources avant que cela n'arrive, alors l'extérieur est votre meilleure option.

chaque fois que j'ai un scenerio similaire à celui-ci, le bloc try-catch est généralement dans une méthode différente plus loin dans la pile d'appels de l'utilisation. Il n'est pas typique pour une méthode de savoir comment gérer les exceptions qui se produisent en son sein comme cela.

donc ma recommandation générale est à 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);
    }
}
32
répondu Jeffrey L Whitledge 2011-05-27 01:34:24
la source

je suppose que c'est la manière préférée:

try
{
    using (StreamWriter sw = File.AppendText(filePath))
    {
        sw.WriteLine(message);
    }
}
catch(Exception ex)
{
   // Handle exception
}
10
répondu CD.. 2011-05-27 01:23:54
la source

si vous avez besoin d'un bloc essayer/attraper de toute façon alors la déclaration d'utilisation ne vous achète pas beaucoup.

StreamWriter sw = null;
try
{
    sw = File.AppendText(filePath);
    sw.WriteLine(message);
}
catch(Exception)
{
}
finally
{
    if (sw != null)
        sw.Dispose();
}
7
répondu hemp 2011-05-27 01:27:08
la source

Autres questions sur