这样做更好吗:
try { ... } catch (Exception ex) { ... throw; }
或这个:
try { ... } catch (Exception ex) { ... throw ex; }
他们做同样的事情吗?这个比那个好吗?
您应该始终使用以下语法重新引发异常。否则你会踩到堆栈跟踪:
throw;
如果您打印由 产生的跟踪throw ex,您将看到它以该语句结束,而不是异常的真正来源。
throw ex
基本上,使用throw ex.
如果需要重新抛出来自其他地方(AggregateException、TargetInvocationException)或可能来自另一个线程的异常,您也不应该直接重新抛出它。而是保留所有必要信息的ExceptionDispatchInfo 。
try { methodInfo.Invoke(...); } catch (System.Reflection.TargetInvocationException e) { System.Runtime.ExceptionServices.ExceptionDispatchInfo.Capture(e.InnerException).Throw(); throw; // just to inform the compiler that the flow never leaves the block }