我想在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
,不过,我得到
“酒吧。你好(字符串)'有错误的返回类型。
我试图代替Action
与Func
玩耍,但似乎阻止我使用方法组语法。
任何想法?我的目标是能够引用许多具有不同返回类型和大量字符串参数的方法,我甚至不打算称它们 - 我只想反思它们的属性。不喜欢lambda表达式的安全,然而,而不只是键入方法名字符串)
编辑:澄清我的理由为希望使用Action<string>
:int
在我的例子可以是任意数量的类型。我试着模板化该类型 -
void Set<T>(Func<Foo, Func<string, T>> a) { }
void Test() { Set(foo => foo.Hello); } // fails
- 但是编译器不能得到T
(大概因为我不能在返回类型超载同样的原因?)。
还有其他想法吗?在这种情况下,我不反对某些疯狂的反思,只要我可以让编译器检查该方法组的名称即可。
有趣的博客文章。不幸的是,我希望在我的示例右侧存在的值的返回类型各不相同。我更新了一些信息。 – ladenedge 2010-10-22 16:13:03
读者也可能对另一个相关的Lippert博客文章[Method Group Conversion Variance]感兴趣(http://blogs.msdn.com/b/ericlippert/archive/2007/10/19/covariance-and-contravariance-in- C-部分三人基团的转化率 - variance.aspx)。 – ladenedge 2011-01-04 20:55:39