我想在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