如何获取System.Exception中InnerMessages属性的引用?
解决方法
首先明确:System.Exception本身并没有InnerMessages这个标准属性,你看到的这个属性属于自定义异常类或者第三方库的异常类型,只是被向上转为System.Exception了。可以按以下两种方式处理:
1. 类型转换(优先推荐)
先判断异常的实际类型,转换后直接访问属性:
// 替换成你项目里异常的真实类型,比如调试时看到的具体类名 if (yourException is CustomException customEx) { // 直接访问InnerMessages数组 foreach (var msg in customEx.InnerMessages) { // 将错误信息写入日志 Log.Error(msg); } }
如果不清楚具体类型,调试时可以查看异常的完整类型名称,用该名称进行类型转换即可。
2. 反射访问(通用兜底方案)
如果无法直接引用异常类型,或者不确定具体类型,可以用反射获取属性值:
// 获取InnerMessages属性 var innerMessagesProp = yourException.GetType().GetProperty("InnerMessages"); if (innerMessagesProp != null) { // 将属性值转为字符串数组(根据实际存储类型调整) var messages = innerMessagesProp.GetValue(yourException) as string[]; if (messages != null) { foreach (var msg in messages) { Log.Error(msg); } } }
额外提示
如果是项目内部的自定义异常,建议直接引用该异常类型而非使用反射——反射不仅性能更低,还会降低代码的可读性和可维护性。
内容的提问来源于stack exchange,提问作者Joe Schmucker
相关产品推荐
相关产品推荐

