c # универсальный метод + вопрос к размышлению - PullRequest
1 голос
/ 01 сентября 2010

В C # я хочу создать универсальный метод, который:

  1. Принимает объект MethodInfo в качестве параметра.
  2. Возвращает объект, который возвращается при вызове MethodInfo.

Источник моей путаницы заключается в том, что я хочу, чтобы метод был типизирован в общем случае с тем же типом возврата, что и объект MethodInfo, который передается внутрь.

Ответы [ 2 ]

2 голосов
/ 01 сентября 2010

Вы не можете сделать это.По определению, generics - это конструкция времени компиляции, в то время как тип возвращаемого значения конкретного MethodInfo известен только во время выполнения (когда вы получаете конкретный экземпляр MethodInfo) и будет меняться от вызова к вызову.

1 голос
/ 01 сентября 2010

Павел Минаев прав,

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

public dynamic MyMethod(MethodInfo methodInfo)

Или, поскольку вы знаете тип возвращаемого значения, укажите это в вызове метода:

public T MyMethod<T>(MethodInfo methodInfo)

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

public T MyMethod<T>(MethodInfo methodInfo, Func<object, T> conversion)

Я думаю, что вызов метода будет очень ясным, как:

Console.WriteLine(MyMethod(methodInfo, (a) => Convert.ToString(a)));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...