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

Vag*_*lov 25 lambda f# interop

F #powerpack附带了一组转换方法,可以从Func <...>转换为F#函数,无论是标准函数还是Tuple函数.但是有可能实现相反的目的:如果你想从F#代码调用一个C#方法,它接受Func <...>并想使用原生的F#lambda表达式(例如fun x - > some_function_of(x))?

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

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

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

kvb*_*kvb 33

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

  • 这也适用于`Expression&lt;Func&lt;_,_&gt;&gt;`吗? (2认同)