You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

自定义异常时,如何向Exception构造函数传入字符串外的异常对象?

自定义异常的正确抛出方式及内部异常传递

你的自定义异常类InvalidEntityException已经正确实现了支持传递内部异常的构造函数,不需要额外创建新的异常类,只需按以下方式正确抛出:

1. 捕获底层异常后包装抛出(最常用场景)

当代码中调用其他可能抛出异常的方法时,在catch块中捕获原始异常,将其作为第二个参数传入自定义异常的构造函数:

try
{
    // 执行可能触发异常的操作,比如D层的添加逻辑
    PerformAddOperation();
}
catch (Exception ex)
{
    // 抛出自定义异常,同时传递原始异常作为内部异常
    throw new InvalidEntityException("Add function :: DAL", ex);
}

2. 手动创建内部异常并抛出(少见场景)

如果确实需要主动传入一个自定义的内部异常对象(而非捕获的异常),可以先实例化对应的Exception对象,再传入:

// 手动创建内部异常实例
var innerException = new ArgumentNullException("entity", "待添加的实体不能为空");
// 抛出自定义异常并传入内部异常
throw new InvalidEntityException("Add function :: DAL", innerException);

关键说明

  • 你的自定义异常构造函数中base(message, ex)已经正确调用了Exception基类的构造函数,传入的内部异常会被存储在InnerException属性中,调试时可通过它追踪异常根源。
  • 传递内部异常的核心是提供一个已实例化的Exception对象作为构造函数的第二个参数,而非字符串。

内容的提问来源于stack exchange,提问作者Sara Daum

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 10:20:22