Я хочу вызвать общий метод с двумя разными параметрами универсального типа. Ниже показано, как выглядит мой метод:
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.
Так может кто-нибудь ответить, как я могу вызвать метод слияния.
@thehennyy Пожалуйста, добавьте это как ответ, чтобы людям было легче, и вы могли собирать свои баллы :-)
Вы должны использовать метод Merge
вновь созданного типа.
Изменить MethodInfo methodInfo = GetType().GetMethod("Merge");
кому: MethodInfo methodInfo = constructed.GetMethod("Merge");
Вы можете попробовать
MethodInfo methodInfo = constructed.GetMethod("Merge");