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

如何获取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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 21:14:56