我想抛出异常是很好的做法,让IT泡沫备份到UI或地方在那里你登录异常,并通知用户了。
为什么ReSharper的说,这是多余的?
try
{
File.Open("FileNotFound.txt", FileMode.Open);
}
catch
{
throw;
}
我想抛出异常是很好的做法,让IT泡沫备份到UI或地方在那里你登录异常,并通知用户了。
为什么ReSharper的说,这是多余的?
try
{
File.Open("FileNotFound.txt", FileMode.Open);
}
catch
{
throw;
}
因为
try {
File.Open("FileNotFound.txt", FileMode.Open);
} catch {
throw;
}
只不过是不同的
File.Open("FileNotFound.txt", FileMode.Open);
如果调用File.Open(string, FileMode)
失败,则在任一采样完全相同的异常会找到自己的方式到UI。
在这种catch
上述条款,你只是赶上并重新抛出异常,而不做别的事情,比如日志,回滚事务,包装异常附加信息添加到它,或任何东西。
然而,
try {
File.Open("FileNotFound.txt", FileMode.Open);
} catch(Exception ex) {
GetLogger().LogException(ex);
throw;
}
将不包含任何冗余和ReSharper的不应该抱怨。 同样,
try {
File.Open("FileNotFound.txt", FileMode.Open);
} catch(Exception ex) {
throw new MyApplicationException(
"I'm sorry, but your preferences file could not be found.", ex);
}
不会是多余的。
由于上述语句具有相同的行为,如果它不在那里。 同写:
File.Open("FileNotFound.txt", FileMode.Open);
因为在尝试代码已经抛出异常。
你只想要赶上并重新抛出异常,如果你打算做别的事情在catch块除了重新抛出异常。
因为它是多余的。
你有没有做过任何处理的catch块,只需再次抛出的异常。
它警告你,因为在其那里,try ... catch块是没有意义的。
此外,另一个很好的提示是“扔恩”将不保留堆栈跟踪,但“扔”的意愿。
值得一提的是,虽然...
try
{
DoSomething();
}
catch
{
throw;
}
......是reduntant,下面是不是...
try
{
DoSomething();
}
catch (Exception ex)
{
// Generally a very bad idea!
throw ex;
}
这第二代码片段充斥通过我继承了几个项目,前一个代码库,它有隐藏原始异常的堆栈跟踪的讨厌的效果。 投掷,你只是陷入了这样的例外是指堆栈跟踪的顶部是在throw
水平,没有提到DoSomething
或任何嵌套方法调用实际上导致异常。
祝你好运调试代码,干这种事!