F# powerpack 带有一组转换方法,用于从 Func<...> 转换为 F# 函数,无论是标准函数还是元组函数。但是是否有可能实现相反的效果:如果您想从 F# 代码调用一个采用 Func<...> 的 C# 方法并想要使用 native F# lambda 表达式(例如 fun x -> some_function_of(x))?
如果我将带有签名 'a -> 'b 的 F# 函数发送到需要 Func 的 C# 方法,则 F# 编译器会生成以下错误:
这个表达式应该有类型 Function<'T,'R> 但这里有类型 'T -> 'R
我想保留 F# lambda 表达式,但要使用翻译层以便能够将它们作为 C# Func lambda 发送。这是可以实现的吗?
请您参考如下方法:
F# 为所有采用相应函数类型的 F# 值的委托(delegate)类型提供构造函数。例如。在您的情况下,您想使用 System.Func<_,_>(fun x -> ...)
它应用生成的类型为 ('a -> 'b) -> System.Func<'a, 'b>
的构造函数.