C#異常重新拋出最佳實踐指南
在C#中處理異常時,選擇合適的重新拋出方法來維護清晰的堆疊追蹤至關重要。
方法一:throw;
此語法重新拋出當前異常,同時保留其堆疊追蹤。
方法二:throw ex;
此方法重新拋出指定的Exception物件。但是,它會用throw語句的目前位置覆蓋原始堆疊追蹤,從而難以找出異常的源頭。
哪種方法比較好?
重新拋出異常時,總是使用throw;
。 throw ex;
應被視為編碼錯誤,因為它會掩蓋有關異常來源的重要資訊。
處理其他來源的異常
如果需要重新拋出源自其他地方的例外(例如,在AggregateException或TargetInvocationException中),請不要直接重新拋出它。相反,請使用ExceptionDispatchInfo來保留必要的資訊。
例如:
<code class="language-csharp">try { methodInfo.Invoke(...); } catch (System.Reflection.TargetInvocationException e) { System.Runtime.ExceptionServices.ExceptionDispatchInfo.Capture(e.InnerException).Throw(); throw; // 确保编译器理解该代码块不会退出 }</code>
以上是在 C# 中應如何重新引發異常以保留堆疊追蹤?的詳細內容。更多資訊請關注PHP中文網其他相關文章!