在 F# 中我有函数:
module ModuleName
let X (y: int -> unit) = ()
我如何在 C# 中调用它?理想情况下它看起来像
ModuleName.X(x => x*x);
但此 lambda 语法不会隐式转换为 FSharpFunc。
最佳答案
最简单的方法是使用标准 .NET 委托(delegate)类型公开您的 API。在这种情况下,这意味着您的 F# 定义应该更像:
let X (y:Action<int>) = ()
但是,如果您想保持 F# API 与当前相同,则可以使用 FuncConvert.ToFSharpFunc
从 C# 端:
ModuleName.X(FuncConvert.ToFSharpFunc(x => x*x));
关于c# - 从 C# 调用具有函数参数的 F# 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9914527/