自定义异常时,如何向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
相关产品推荐
相关产品推荐

