Вызов универсального метода с параметром универсального типа с использованием отражения - PullRequest
0 голосов
/ 22 мая 2019

Я хочу вызвать универсальный метод, имеющий два разных параметра универсального типа.Вот как выглядит мой метод:

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.Так может кто-нибудь ответить, как я могу вызвать метод слияния.

1 Ответ

0 голосов
/ 22 мая 2019

Вы должны использовать метод Merge вновь созданного типа.

Изменить MethodInfo methodInfo = GetType().GetMethod("Merge");

на: MethodInfo methodInfo = constructed.GetMethod("Merge");

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...