Вызов универсального метода с параметром универсального типа с использованием отражения

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

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

Вы можете попробовать MethodInfo methodInfo = constructed.GetMethod("Merge");

thehennyy 22.05.2019 14:03

@thehennyy Пожалуйста, добавьте это как ответ, чтобы людям было легче, и вы могли собирать свои баллы :-)

Bart van der Drift 22.05.2019 15:00
3 метода стилизации элементов HTML
3 метода стилизации элементов HTML
Когда дело доходит до применения какого-либо стиля к нашему HTML, существует три подхода: встроенный, внутренний и внешний. Предпочтительным обычно...
Формы c голосовым вводом в React с помощью Speechly
Формы c голосовым вводом в React с помощью Speechly
Пытались ли вы когда-нибудь заполнить веб-форму в области электронной коммерции, которая требует много кликов и выбора? Вас попросят заполнить дату,...
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Будучи разработчиком веб-приложений, легко впасть в заблуждение, считая, что приложение без JavaScript не имеет права на жизнь. Нам становится удобно...
Flatpickr: простой модуль календаря для вашего приложения на React
Flatpickr: простой модуль календаря для вашего приложения на React
Если вы ищете пакет для быстрой интеграции календаря с выбором даты в ваше приложения, то библиотека Flatpickr отлично справится с этой задачей....
В чем разница между Promise и Observable?
В чем разница между Promise и Observable?
Разберитесь в этом вопросе, и вы значительно повысите уровень своей компетенции.
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Клиент для URL-адресов, cURL, позволяет взаимодействовать с множеством различных серверов по множеству различных протоколов с синтаксисом URL.
1
2
51
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

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

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

кому: MethodInfo methodInfo = constructed.GetMethod("Merge");

Другие вопросы по теме