Mar*_*ell 12
这实际上不是一个C#问题,而是一个CLI设计问题,并归结为不同的IL指令,throw以及rethrow.
基本上,throw ex;(对于任何ex,甚至是原始的)都是IL throw,其中 - 就像throw;IL一样rethrow.
如果要指定要抛出的特定异常,那么此异常在逻辑上源自此处,现在是此方法.如果不是这样,那么:
throw;
Run Code Online (Sandbox Code Playgroud)
而不是throw ex;,或:将异常包装在另一个异常中,因此您保留原始异常并显示新异常的来源:
throw new SomeException(ex);
Run Code Online (Sandbox Code Playgroud)
在这种情况下,调用者可以通过获取原始堆栈跟踪ex.InnerException.