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

非泛型场景下实例化Exception类型的实现问题求助

解决方法分析与修复代码

首先,你的代码里有个关键疏漏:ErrorCode的构造函数没有给ExceptionT属性赋值,这会导致调用ThrowException时ExceptionT为null,直接引发空引用异常。这是第一个要修复的点。

其次,关于Activator.CreateInstance返回object类型的问题,我们可以通过提前验证类型合法性,再进行安全强制转换来解决。以下是完整的修复方案:

修复后的ErrorCode类

public class ErrorCode { 
    public int HttpStatus { get; private set; } 
    public string JsonErrorCode { get; private set; } 
    public Type ExceptionT { get; private set; } 

    public ErrorCode(string pJsonErrorCode, int pHttpStatus, Type pExceptionType) { 
        // 验证传入的异常类型有效性
        if (pExceptionType == null)
            throw new ArgumentNullException(nameof(pExceptionType));
        if (!typeof(Exception).IsAssignableFrom(pExceptionType))
            throw new ArgumentException($"类型 {pExceptionType.Name} 必须继承自 System.Exception", nameof(pExceptionType));
        if (pExceptionType.GetConstructor(new[] { typeof(string) }) == null)
            throw new ArgumentException($"类型 {pExceptionType.Name} 没有接受单个string参数的构造函数", nameof(pExceptionType));

        // 补全属性赋值
        this.HttpStatus = pHttpStatus; 
        this.JsonErrorCode = pJsonErrorCode; 
        this.ExceptionT = pExceptionType; 
    } 

    public void ThrowException(string pMsg) { 
        // 安全强转为Exception,因为构造阶段已经验证过类型
        var exception = (Exception)Activator.CreateInstance(ExceptionT, pMsg);
        throw exception;
    } 
}

为什么这样修复?

  • 构造函数验证:提前检查传入的Type是否符合要求(是Exception子类、有指定构造函数),把错误提前暴露在初始化阶段,而不是在抛出异常时才发现问题,便于调试和维护。
  • 安全强转:因为已经在构造阶段确认了类型合法性,所以(Exception)强制转换是安全的,不会出现类型转换异常。
  • 补全属性赋值:解决了原代码中ExceptionT未初始化的核心问题。

字典使用保持不变

你的字典添加逻辑不需要修改,只要确保对应的异常类型满足构造函数的验证要求(继承Exception、有string参数构造函数)即可:

Protocol.ErrorCodes.Add(ErrorCodeType.ElementClickIntercepted, new ErrorCode("element click intercepted", 400, typeof(ElementClickInterceptedException)));

如果部分异常类型没有string参数的构造函数,你可以根据实际情况调整验证逻辑,或者使用Activator.CreateInstance的其他重载(比如无参构造),但统一使用带消息的构造函数会让错误信息更清晰,更利于问题排查。

内容的提问来源于stack exchange,提问作者Andrew Mills

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:36:04