try {} catch(Exception e){} VS try {} catch(Exception e){throw;} - 有什么区别?

时间:2014-06-26 13:09:30

标签: c# anti-patterns

我来到这里,下一个代码是反模式。是不是?

try
{
//something
} 
catch(Exception e)
{
//something
}

为什么更好地使用

try
{
//something
} 
catch(Exception e)
{
 //something
 throw;
}

我得到了第二个变量用于重新抛出异常(例如日志记录),但如果我需要重新抛出相同的异常,为什么不使用下一个代码?

try
{
//something
} 
catch(Exception e)
{
 //something
 throw e;
}

1 个答案:

答案 0 :(得分:1)

这将重新抛出相同的异常并保持堆栈跟踪。这将使调试更容易。

catch(Exception e)
{
 //something
 throw;
}

这将重新抛出异常,但您将丢失堆栈跟踪。

catch(Exception e)
{
 //something
 throw e;
}

这将无声地吞下异常。您只想在捕获特定异常而不是Exception时执行此操作。你通常应该有充分的理由这样做。

try
{
//something
} 
catch(Exception e)
{
//something
}