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

使用Activator.CreateInstance创建泛型类实例时抛出构造函数未找到异常

问题分析与解决方案

你的错误根源非常清晰:你试图给GenericClass<T>的构造函数传递参数,但这个类根本没有定义带参数的构造函数——它只有默认的无参构造函数,所以Activator.CreateInstance找不到匹配的构造函数,才抛出了这个错误。

而且你的代码逻辑出现了混淆:你要传递的args是给目标类(比如DC_Header_Vendor)的构造函数用的,不是给GenericClass<T>的构造函数用的。

第一步:修正GenericClass<T>的冗余泛型定义

你的ObjectCreate方法重复定义了泛型参数T,这和类的泛型参数T冲突,也完全没必要。先把这个方法的泛型参数去掉:

namespace eDebitCreditNote.Models {
    public class GenericClass<T> {
        // 去掉方法的泛型参数,直接复用类的泛型T
        public T ObjectCreate(object[] args) {
            return (T)Activator.CreateInstance(typeof(T), args);
        }
        public IDictionary<string, object> FieldValues { get; set; }
    }
}

第二步:修正实例化逻辑

你需要先创建GenericClass<T>的无参实例,再调用它的ObjectCreate方法来传入参数创建目标类的实例:

object[] args = new object[1] { values }; 
string classname = tblform.HeaderTable; 
var sometype = Type.GetType("eDebitCreditNote.Models." + classname); 
var genericType = typeof(GenericClass<>).MakeGenericType(new[] { sometype }); 

// 1. 创建GenericClass<T>的无参实例(因为它只有无参构造)
var genericInstance = Activator.CreateInstance(genericType);

// 2. 获取ObjectCreate方法并调用,传入目标类构造所需的参数
var createMethod = genericType.GetMethod("ObjectCreate");
var targetInstance = createMethod.Invoke(genericInstance, new[] { args });

额外说明

  • 如果Type.GetType返回null,你可能需要在类名后加上程序集名称(比如"eDebitCreditNote.Models.DC_Header_Vendor, eDebitCreditNote"),不过从你的错误信息来看,类型已经被找到,所以暂时不需要担心这个问题。
  • 如果你确实需要GenericClass<T>支持带参构造,那你需要在类里显式定义对应的构造函数,但根据你的需求,这完全没必要——因为参数是给目标类用的,不是给泛型类用的。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 08:57:51