Как использовать GetMethod для нескольких определений функций, в которых соответствие имеет общий тип параметра? - PullRequest
1 голос
/ 09 мая 2011

Мне нужно вызвать метод класса, используя отражение. Класс содержит две перегрузки для одной и той же функции:

    string GenerateOutput<TModel>(TModel model);
    string GenerateOutput<TModel>(TModel model, string templateName);

Я получаю метод так:

    Type type = typeof(MySolution.MyType);
    MethodInfo method = typeof(MyClass).GetMethod("GenerateOutput", new Type[] {type ,typeof(string)});
    MethodInfo generic = method.MakeGenericMethod(type);

Метод не выбран (method = null), я полагаю, потому что первый параметр метода является универсальным типом. Как это должно быть обработано?

Ответы [ 2 ]

4 голосов
/ 09 мая 2011

Возможны две проблемы: найти метод, если он не является общедоступным (пример показывает, что он не является общедоступным), и обработать обобщенные значения.

ИМО, здесь самый простой вариант:

MethodInfo generic = typeof(MyClass).GetMethods(
        BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance)
    .Single(x => x.Name == "GenerateOutput" && x.GetParameters().Length == 2)
    .MakeGenericMethod(type);

Вы можете сделать предложение Single более ограничительным, если оно неоднозначно.

1 голос
/ 09 мая 2011

В .NET при работе с шаблонами и отражениями вам нужно указать, сколько общих параметров имеет класс или метод, например:

"NameOfMember`N" 

Где "N" - это число общих параметров.

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