我試圖寫一個函數,函數作爲它的一個參數 - 我以前做過很多次的任務。這工作得很好:功能可以運行一個方向,而不是其他
int RunFunction(Func<int,int> f, int input) {
return f(input);
}
int Double(int x) {
return x*2;
}
// somewhere else in code
RunFunction(Double,5);
然而,這不起作用:
public static class FunctionyStuff {
public static int RunFunction(this Func<int,int> f, int input) {
return f(input);
}
}
// somewhere else in code
Double.RunFunction(5);
任何想法,爲什麼第一個作品,第二個不?
也許你也應該解釋爲什麼* *它不發生的擴展方法和lambda表達式。這是因爲他們沒有特定的委託類型。 'Func鍵'和'假設可能MyIntIntDelegate'具有相同的簽名,但將是不同的類型,所以編譯器可能不知道要轉換成哪一個。 –
Timwi
2012-03-18 00:18:53
所以如果我得到這個權利,在第一個版本中有一個從'Method'到'Func'的隱式轉換? – Joe 2012-03-18 00:19:56
@Timwi:我正在那裏... – 2012-03-18 00:24:11