Skip to main content
 首页 » 编程设计

f#之F# 和 C# lambda 之间的互操作

2024年11月24日21yjmyzz

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> 的构造函数.