有人能简单地告诉我throw和throw ex的区别吗?我读到throw存储以前的异常,但没有得到这一行。
我可以用例子简要地说明一下吗?
发布于 2014-02-13 22:21:20
是- throw重新抛出捕获的异常,并保留堆栈跟踪。throw ex抛出相同的异常,但将堆栈跟踪重置为该方法。
除非您想要重置堆栈跟踪(即保护公共调用者不受库的内部工作的影响),否则throw通常是更好的选择,因为您可以看到异常是从哪里产生的。
我还想提一下“直通”catch块:
try
{
// do stuff
}
catch(Exception ex)
{
throw;
}是毫无意义的。这是完全相同的行为,就好像根本没有try/catch一样。
发布于 2014-02-13 22:22:23
抛出将重新抛出原始异常;
抛出ex将创建一个新的异常,因此堆栈跟踪会发生变化。通常没有什么意义,通常你应该直接抛出,或者创建一个新的异常并抛出它,例如
// not a great code, demo purposes only
try{
File.Read("blah");
}
catch(FileNotFoundException ex){
throw new ConfigFileNotFoundException("Oops", ex);
}https://stackoverflow.com/questions/21756461
复制相似问题