2010-03-19 16 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”任何意义。

相关问题