从C#调用具有函数参数的F#函数

Pau*_*icz 4 c# f#

在F#我有这个功能:

module ModuleName
let X (y: int -> unit) = ()
Run Code Online (Sandbox Code Playgroud)

我如何在C#中调用它?理想情况下它看起来像

ModuleName.X(x => x*x);
Run Code Online (Sandbox Code Playgroud)

但是这个lambda语法不会隐式转换为FSharpFunc.

kvb*_*kvb 13

最简单的方法是使用标准.NET委托类型公开您的API.在这种情况下,这意味着您的F#定义应该更像:

let X (y:Action<int>) = ()
Run Code Online (Sandbox Code Playgroud)

但是,如果您希望保持F#API与当前相同,那么您可以FuncConvert.ToFSharpFunc在C#端使用:

ModuleName.X(FuncConvert.ToFSharpFunc(x => x*x));
Run Code Online (Sandbox Code Playgroud)