使用反射调用具有泛型类型参数的泛型方法

时间:2019-05-22 11:55:57

标签: c# reflection

我想调用具有两个不同泛型类型参数的泛型方法。下面是我的方法:

public class ABC<T> : IABC<T> where T: class,new()
{
    public T Merge<T1>(T child, T parent, T1 rule){

    }
}

我想从另一个方法调用Merge方法。以下是我尝试调用的内容。

Type mergerType = GetType().GetGenericTypeDefinition();

Type constructed = mergerType.MakeGenericType(new[]
{
    childValue.GetType()
});

object mergerInstance = Activator.CreateInstance(constructed);

MethodInfo methodInfo = GetType().GetMethod("Merge");

MethodInfo method = methodInfo.MakeGenericMethod(ruleValue.GetType());

mergedObject = method.Invoke(mergerInstance, new[]
                {
                    childValue,
                    parentValue,
                    ruleValue
                });

在执行此操作时,在method.invoke()之后出现异常“对象与目标类型不匹配”。 我不能更改ABC类或Merge方法的类或方法定义,因为许多其他类正在实现IABC接口。 有人可以回答我如何调用Merge方法。

1 个答案:

答案 0 :(得分:0)

您必须使用新构造类型的Merge方法。

更改MethodInfo methodInfo = GetType().GetMethod("Merge");

收件人:MethodInfo methodInfo = constructed.GetMethod("Merge");