【发布时间】:2017-05-16 14:07:08
【问题描述】:
我有 try 和 catch 的代码。
try
{
// Some code...
}
catch (Exception err)
{
throw err;
}
写这样的代码有优势吗?
从 catch 中抛出异常并编写 try 和 catch 而不是从中断的行中获取错误。
【问题讨论】:
-
如果按原样编写,没有任何好处,只有搞砸 StackTrace 的缺点
我有 try 和 catch 的代码。
try
{
// Some code...
}
catch (Exception err)
{
throw err;
}
写这样的代码有优势吗?
从 catch 中抛出异常并编写 try 和 catch 而不是从中断的行中获取错误。
【问题讨论】:
只有当你打算用它做某事时,你才应该捕获一个异常。例如,要向其中添加额外信息,将其记录到文件或类似文件中,或者更改异常:
try
{
//Some Code...
}
catch (WebException err)
{
throw new LicenseException("This was really bad!", err);
}
catch (Exception err)
{
err.Data.Add("some-info", 123);
logFramework.Log(err);
throw;
}
永远不要重新抛出相同的异常 (throw err):这样做会丢失调用堆栈。相反,只是throw,它保留了调用堆栈。
【讨论】:
finally{},我会投赞成票
在这两个选项中,您必须在更高级别上捕获异常。第一个选项(您的代码)让您有机会对异常做出反应或制作额外的日志。
【讨论】:
有时可以使用这种方法,但一般不推荐。
另外,如果你需要抛出这样的异常,你需要稍微修改一下你的代码:
try
{
//Some Code...
}
catch (Exception err)
{
//I'll recommend to remove err here, because if not you'll lose the full stack trace.
throw;
}
【讨论】: