Я пытаюсь использовать группу методов в лямбда-выражении, например:
public class Foo { public void Hello(string s) { } }
void Test()
{
// this works as long as Hello has a void return type
Func<Foo, Action<string>> a = foo => foo.Hello;
}
Когда я изменяю тип возврата Hello
на int
, я получаю
'Bar.Hello (string)' имеет неправильный тип возврата.
Я попытался поиграть с Func
вместо Action
, но это, кажется, мешает мне использовать синтаксис группы методов.
Есть идеи?
(Моя цель, fwiw, заключается в том, чтобы иметь возможность ссылаться на многочисленные методы, которые имеют разные типы возвращаемых значений и множество строковых аргументов. Я даже не собираюсь вызывать их - я просто хочу обдумать их атрибуты. как безопасность лямбд, однако, вместо простого ввода строк имени метода.)
Редактировать : чтобы уточнить мои причины желания использовать Action<string>
: int
в моем примере может быть любого из нескольких типов. Я пытался шаблонизировать этот тип -
void Set<T>(Func<Foo, Func<string, T>> a) { }
void Test() { Set(foo => foo.Hello); } // fails
- но компилятор не может получить T
(предположительно по тем же причинам, по которым я не могу перегрузить тип возвращаемого значения?).
Есть еще идеи? В этом случае я не против какого-то безумного размышления, пока я могу заставить компилятор проверить имя этой группы методов.