【问题标题】:Interop between F# and C# lambdasF# 和 C# lambda 之间的互操作
【发布时间】:2010-08-03 05:45:13
【问题描述】:

F# powerpack 带有一组转换方法,可将 Func<...> 转换为 F# 函数,无论是标准函数还是元组函数。但是是否有可能实现相反的效果:如果您想从 F# 代码调用采用 Func<...> 的 C# 方法并想使用本机 F# lambda 表达式(例如 fun x -> some_function_of(x))?

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

这个表达式应该有类型 Function 但这里有类型 'T -> 'R

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

【问题讨论】:

  • 对于在此处提到的 PowerPack 中找不到转换方法的任何人,他们在 FSharp.PowerPack.Linq、FuncConvertExtensions 中

标签: f# interop lambda


【解决方案1】:

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

【讨论】:

  • 这是否也适用于Expression&lt;Func&lt;_,_&gt;&gt;
  • 有时转到 Google 结果的第三页是值得的。 A++++ 会再次投票。
猜你喜欢
  • 2023-03-02
  • 1970-01-01
  • 2023-03-07
  • 1970-01-01
  • 2017-10-26
  • 2014-05-04
  • 1970-01-01
  • 2010-10-24
  • 1970-01-01
相关资源
最近更新 更多