Where do I put try/catch with “using” statement?
本问题已经有最佳答案,请猛点这里访问。
Possible Duplicate:
try/catch + using, right syntax
我想做以下的事情:
1 2 3 4 5 | //write to file using (StreamWriter sw = File.AppendText(filePath)) { sw.WriteLine(message); } |
我是把
如果catch语句需要访问using语句中声明的变量,那么只有inside选项。
如果catch语句在释放前需要在using中引用的对象,则只有inside选项。
如果catch语句执行的操作持续时间未知,例如向用户显示消息,并且您希望在执行该操作之前释放资源,那么outside是您的最佳选择。
每当我有一个与此类似的scenerio时,try-catch块通常位于调用堆栈上方的另一个方法中。对于一个方法来说,知道如何处理在它内部发生的异常是不典型的。
所以我一般的建议是在外面。
1 2 3 4 5 6 7 8 9 10 11 | 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 2 3 4 5 6 7 8 9 10 11 | try { using (StreamWriter sw = File.AppendText(filePath)) { sw.WriteLine(message); } } catch(Exception ex) { // Handle exception } |
如果您无论如何都需要一个try/catch块,那么using语句不会给您带来太多好处。把它扔了,改为这样做:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | StreamWriter sw = null; try { sw = File.AppendText(filePath); sw.WriteLine(message); } catch(Exception) { } finally { if (sw != null) sw.Dispose(); } |