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

可能重复:
try / catch + using,正确的语法

我想try/catch以下内容:

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

我是否将try/catch块放在using语句中,或者在它周围? 或两者?

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

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

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

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

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

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

我想这是首选方式:

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

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

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