在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)