c#.net中throw和throw ex的区别

任何人都可以简单地告诉我throwthrow 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); }