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中文网其他相关文章!