例如:
try
{
// do stuff that can fail
}
catch (Exception ex)
{
// do stuff
throw ex;
}
"throw ex" 是一种不良实践,因为堆栈跟踪会在失败的方法下截断。这样就更难调试代码。因此,代码应该是:
try
{
// do stuff that can fail
}
catch (Exception ex)
{
// do stuff
throw;
}
我的问题是,为什么编译器会授权这个(或者不显示警告消息?) "throw ex" 有用的情况是什么?
throw ex
时怎么办? - DavidGthrow ex
)”,显而易见的答案是,他们为什么要花时间专门修改编译器来防止这种情况呢? - Damien_The_Unbelievercatch(Exception){}
真正困难的情况不是更重要吗?这些情况可能真的很难调试。但如果我们不能忽略ThreadAbortException
,那会多么烦人呢? - user645280catch(){throw;}
通常也是不好的实践,因为finally{}
通常更合适,除非你绝对需要知道异常中的细节......(事实上,我写了很多的finally语句,但是我很少用到catch)老实说,审查大量代码时,我会首先查找catch()
。 - user645280