有人能简单地告诉我throw
和throw ex
之间的区别吗?
我读到throw
存储以前的例外情况,而不是这一行
我可以通过示例简要介绍一下吗?
答案 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);
}