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

28
F# PowerPack带有一组转换方法,可以将从Func<...>到F#函数(标准或元组)的翻译。但是相反的情况是否可行:如果您想从F#代码调用需要Func<...>参数的C#方法,并且想要使用本地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发送。这可行吗?

2
对于那些在此处提到的PowerPack中找不到转换方法的人,它们位于FSharp.PowerPack.Linq,FuncConvertExtensions中。 - Joel Mueller
1个回答

40

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


2
这是否也适用于 Expression<Func<_,_>> - Maslow
有时候查看谷歌搜索结果的第三页是有收获的。A++++,再次点赞。 - Bryan Slatner

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接