c#.net中throw和throw ex之间的差异

时间:2014-02-13 14:05:09

标签: c# throw

有人能简单地告诉我throwthrow ex之间的区别吗? 我读到throw存储以前的例外情况,而不是这一行 我可以通过示例简要介绍一下吗?

2 个答案:

答案 0 :(得分:25)

是 - throw重新抛出捕获的异常,并保留堆栈跟踪。 throw ex抛出相同的异常,但将堆栈跟踪重置为该方法。

除非您希望重置堆栈跟踪(即屏蔽公共呼叫者与您的库的内部工作方式),throw 通常是更好的选择,因为你可以看到异常的起源。

我还要提到一个“传递”捕获块:

try
{
   // do stuff
}
catch(Exception ex)
{
    throw;
}

毫无意义。这与完全没有try/catch的行为完全相同。

答案 1 :(得分:4)

投掷将重新抛出原始异常;

throw ex会创建一个新的异常,因此堆栈跟踪会发生变化。通常没什么意义,通常你应该只是抛出,或者创建一个新的异常并抛出它,例如

// not a great code, demo purposes only
try{
File.Read("blah");
}
catch(FileNotFoundException ex){
throw new ConfigFileNotFoundException("Oops", ex);
}