是否有可能獲得C#運算符背後的函數? 例如在F#中,你可以做如何在C#中獲得特定的運算符函數?
let add = (+);;
val add : (int -> int -> int)
是否有可能在C#中做這樣的事情:
Func<int, int, int> add = (+);
或
Func<int, int, int> add = Int32.(+)
?
是否有可能獲得C#運算符背後的函數? 例如在F#中,你可以做如何在C#中獲得特定的運算符函數?
let add = (+);;
val add : (int -> int -> int)
是否有可能在C#中做這樣的事情:
Func<int, int, int> add = (+);
或
Func<int, int, int> add = Int32.(+)
?
你可以使用lambda表達式:
Func<int, int, int> func = (val1, val2) => val1 + val2;
下面是一個間接的方式做你想要什麼:
Func<int, int, int> add = (int a, int b) => a + b;
當反映,可以看出,F#不直接訪問Int32.operator+
(這可能是不可能的),但是像上面的C#代碼那樣只是使用內部委託類型(Microsoft.FSharp.Core.FastFunc
)。
要添加到其他的答案,另外的int
s的由CIL add
指令完成的,而不是一個方法調用,所以沒有在其中將有可能獲得「實際MethodInfo
」任何意義。