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

如何在未知参数类型时为Assembly.CreateInstance传入Object[]参数

在未知构造函数参数类型时使用Assembly.CreateInstance创建实例

你已经通过ConstructorInfo.GetParameters()拿到了构造函数的参数信息,接下来只需要根据每个参数的类型生成对应的值,再填充到参数数组中即可。以下是修改后的完整代码:

foreach (Type T in assembly.GetTypes())
{
    Console.WriteLine("Class Defined: " + T.FullName);
    ConstructorInfo ctor = T.GetConstructors()[0];
    ParameterInfo[] CtorParams = ctor.GetParameters();
    
    // 初始化参数值数组
    object[] paramValues = new object[CtorParams.Length];
    for (int i = 0; i < CtorParams.Length; i++)
    {
        ParameterInfo p = CtorParams[i];
        Console.WriteLine(p.Name + ":" + p.ParameterType);
        
        // 根据参数类型生成对应值
        if (p.ParameterType.IsValueType)
        {
            // 值类型取默认值,也可以根据需求设置自定义测试值
            paramValues[i] = Activator.CreateInstance(p.ParameterType);
            // 示例:如果是int类型,设置为100
            // if (p.ParameterType == typeof(int)) paramValues[i] = 100;
        }
        else if (p.ParameterType == typeof(string))
        {
            // 字符串类型设置测试值,避免null
            paramValues[i] = "test_input";
        }
        else
        {
            // 其他引用类型优先尝试创建实例,失败则设为null
            try
            {
                paramValues[i] = Activator.CreateInstance(p.ParameterType);
            }
            catch
            {
                paramValues[i] = null;
            }
        }
    }
    
    // 使用生成的参数数组创建类实例
    Object obj = assembly.CreateInstance(T.FullName, false, BindingFlags.Default, null, paramValues, null, null);
    if (obj != null)
    {
        Console.WriteLine(obj.ToString());
    }
}

核心逻辑说明

  • 通过ParameterType.IsValueType判断是否为值类型,用Activator.CreateInstance生成默认值(比如int默认0、bool默认false)
  • 字符串类型单独处理,可设置自定义测试字符串,避免传入null引发异常
  • 其他引用类型尝试创建实例,失败则设为null,确保代码能正常执行

如果需要更灵活的参数赋值(比如从配置读取、用户输入),可以在对应类型的分支里扩展逻辑,核心都是根据参数类型匹配对应的值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 06:00:12