用反射和动态参数计数实例化对象

本文关键字:实例化 对象 参数 反射 动态 | 更新日期: 2023-09-27 18:02:40

我有一些类。通过反射,我得到它的构造函数和参数计数/类型。我也有任何类型的建设者。所以我需要输入

var constructor;
var params = constructor.GetParameters();
object[] args;
foreach( var param in params ) {
    var type = param.Parametertype;
    args[] += (object)Build<type>();
}
Activator.CreateInstance(Type, args);

问题,我不能传递参数的类型作为泛型参数

用反射和动态参数计数实例化对象

不,你还需要使用反射来调用泛型方法:

var constructor = ...;
var parameters = constructor.GetParameters();
object[] args = new object[parameters.Length];
// Adjust this for private methods etc
var buildMethod = typeof(ClassContainingBuild).GetMethod("Build");
for (int i = 0; i < args.Length; i++)
{
    var genericBuild = buildMethod.MakeGenericMethod(parameters[i].ParameterType);
    // Adjust appropropriately for target etc
    args[i] = genericBuild.Invoke(this, null); 
}