c#.net中throw和throw ex的区别
任何人都可以简单地告诉我throw
和throw ex
之间的区别吗? 我读到throw
存储先前的exception,而不是获得此行。
我可以举例说明这个吗?
是 – throw
重新抛出捕获的exception,并保留堆栈跟踪。 throw ex
会抛出相同的exception,但会将堆栈跟踪重置为该方法。
除非您想重置堆栈跟踪(即屏蔽公共调用者与库的内部工作方式),否则throw
通常是更好的选择,因为您可以看到exception发生的位置。
我还要提到一个“传递”捕获块:
try { // do stuff } catch(Exception ex) { throw; }
毫无意义。 这与完全没有try/catch
行为完全相同。
投掷将重新抛出原始exception;
throw ex将创建一个新的exception,因此堆栈跟踪会发生变化。 通常没什么意义,通常你应该只是抛出,或者创建一个新的exception并抛出它,例如
// not a great code, demo purposes only try{ File.Read("blah"); } catch(FileNotFoundException ex){ throw new ConfigFileNotFoundException("Oops", ex); }