是否有可能获得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
”任何意义。