我在哪里将try / catch与“using”语句放在一起?

时间:2011-05-26 21:21:49

标签: c# try-catch using-statement

  

可能重复:
  try/catch + using, right syntax

我想try/catch以下内容:

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

我是否将try/catch块放在using语句中或周围?或两者兼而有之?

3 个答案:

答案 0 :(得分:35)

如果你的catch语句需要访问using语句中声明的变量,那么inside是你唯一的选择。

如果你的catch语句在处理之前需要使用中引用的对象,那么inside是你唯一的选择。

如果您的catch语句采取持续时间不明的操作,例如向用户显示消息,并且您希望在此之前处置您的资源,那么外部是您的最佳选择。

每当我有一个与此类似的scenerio时,try-catch块通常采用与使用中调用堆栈相同的不同方法。对于方法而言,通常不知道如何处理在其中发生的异常。

所以我的一般推荐是在外面的外面。

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);
    }
}

答案 1 :(得分:11)

我认为这是首选方式:

try
{
    using (StreamWriter sw = File.AppendText(filePath))
    {
        sw.WriteLine(message);
    }
}
catch(Exception ex)
{
   // Handle exception
}

答案 2 :(得分:6)

如果你还需要一个try / catch块,那么using语句并没有给你带来太大的收益。只是放弃它而是这样做:

StreamWriter sw = null;
try
{
    sw = File.AppendText(filePath);
    sw.WriteLine(message);
}
catch(Exception)
{
}
finally
{
    if (sw != null)
        sw.Dispose();
}