2010-03-19 64 views
2

是否有可能獲得C#運算符背後的函數? 例如在F#中,你可以做如何在C#中獲得特定的運算符函數?

let add = (+);; 

val add : (int -> int -> int) 

是否有可能在C#中做這樣的事情:

Func<int, int, int> add = (+); 

Func<int, int, int> add = Int32.(+) 

回答

5

你可以使用lambda表達式:

Func<int, int, int> func = (val1, val2) => val1 + val2; 
3

下面是一個間接的方式做你想要什麼:

Func<int, int, int> add = (int a, int b) => a + b; 

當反映,可以看出,F#不直接訪問Int32.operator+ (這可能是不可能的),但是像上面的C#代碼那樣只是使用內部委託類型(Microsoft.FSharp.Core.FastFunc)。

0

要添加到其他的答案,另外的int s的由CIL add指令完成的,而不是一個方法調用,所以沒有在其中將有可能獲得「實際MethodInfo」任何意義。