我想调用具有两个不同泛型类型参数的泛型方法。下面是我的方法:
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方法。
答案 0 :(得分:0)
您必须使用新构造类型的Merge
方法。
更改MethodInfo methodInfo = GetType().GetMethod("Merge");
收件人:MethodInfo methodInfo = constructed.GetMethod("Merge");