F#和C#lambdas之间的互操作

时间:2010-08-02 21:38:52

标签: f# interop lambda

F#powerpack附带一组转换方法,可以从Func< ...>转换到F#函数,标准函数或三元函数。但是有可能实现相反的目的:如果你想从F#代码调用一个C#方法,它需要Func< ...>并希望使用原生F#lambda表达式(例如fun x - > some_function_of(x))?

如果我发送带有签名'a - >的F#函数'b到C#方法,期望Func然后F#编译器生成以下错误:

This expression was expected to have type Function<'T,'R> but here has type 'T -> 'R

我想继续使用F#lambda表达式,但要使用转换层才能将它们作为C#Func lambda发送。这可以实现吗?

1 个答案:

答案 0 :(得分:32)

F#为所有委托类型提供构造函数,这些委托类型采用相应函数类型的F#值。例如。在您的情况下,您希望使用System.Func<_,_>(fun x -> ...)来应用生成的('a -> 'b) -> System.Func<'a, 'b>类型的构造函数。

相关问题