可能重复:
使用正确语法的try/catch
我想尝试使用以下代码进行try/catch
:
//write to file
using (StreamWriter sw = File.AppendText(filePath))
{
sw.WriteLine(message);
}
在using
语句中,我是应该把try
/catch
块放在里面、外面还是两边都放?
可能重复:
使用正确语法的try/catch
我想尝试使用以下代码进行try/catch
:
//write to file
using (StreamWriter sw = File.AppendText(filePath))
{
sw.WriteLine(message);
}
在using
语句中,我是应该把try
/catch
块放在里面、外面还是两边都放?
如果你的catch语句需要访问在using语句中声明的变量,那么内部是你唯一的选择。
如果您的catch语句需要在使用之前引用using中的对象,则内部是您唯一的选择。
如果您的catch语句需要执行未知持续时间的操作(例如向用户显示消息),并且希望在此操作发生之前处理资源,则外部是最佳选择。
通常情况下,当我遇到类似情形时,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);
}
}
我认为这是首选的方式:
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();
}
using
,只是为了保持一致性,但如果程序员不知道他们应该处理对象,则这两种模式都无关紧要。这纯粹涉及个人偏好,根据定义是主观的。我确实喜欢在这里放置它在finally
块中的想法,但我不会这样做,因为我担心可能会困惑其他不理解的程序员。 - crush