我正在尝试在 lambda 表达式中使用方法组,如下所示:
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,是能够引用具有不同返回类型和大量字符串参数的众多方法。我什至不打算调用它们 - 我只是想反映它们的属性。我确实喜欢安全然而,与只输入方法名称字符串相比,lambdas。)
编辑:澄清我想要使用的原因Action<string>
:int
在我的示例中可能是多种类型中的任何一种。我尝试模板化该类型——
void Set<T>(Func<Foo, Func<string, T>> a) { }
void Test() { Set(foo => foo.Hello); } // fails
- 但是编译器不能派生T
(大概是出于同样的原因,我不能在返回类型上重载?)。
还有其他想法吗?在这种情况下,只要我能让编译器检查该方法组的名称,我并不反对一些疯狂的反思。