C#異常處理:throw
與 throw new Exception()
的區別
在處理C#異常時,程式設計師可能會遇到兩種看起來相似的結構:
<code class="language-csharp">try { ... } catch { throw }</code>
以及
<code class="language-csharp">try { ... } catch (Exception e) { throw new Exception(e.Message); }</code>
雖然兩者都會拋出異常,但它們的行為存在關鍵差異。
throw
不帶參數的throw
語句會重新拋出導致try
區塊失敗的原始例外。這意味著原始異常的堆疊追蹤被保留,方便調試和追溯錯誤的來源。
throw new Exception()
另一方面,throw new Exception(e.Message)
會建立一個新的異常實例,其Message
屬性設定為原始異常的訊息。但是,這有幾個缺點:
ArgumentException
,包含附加資訊(如ParamName
),在建立不同類型的新異常時會遺失這些資訊。 最佳實務:
在大多數情況下,強烈建議避免使用throw e
或throw new Exception(e.Message)
來重新拋出異常。請考慮以下方法:
throw;
。 InnerException
參數傳遞來保留原始異常的屬性,包括堆疊追蹤。 以上是` throw` 與 ` throw new Exception()`:什麼時候應該在 C# 中重新拋出異常?的詳細內容。更多資訊請關注PHP中文網其他相關文章!