繁体   English   中英

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

[英]Call F# function that has a function parameter from C#

在F#我有这个功能:

module ModuleName
let X (y: int -> unit) = ()

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

ModuleName.X(x => x*x);

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

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

let X (y:Action<int>) = ()

但是,如果要保持F#API与当前相同,则可以使用C#端的FuncConvert.ToFSharpFunc

ModuleName.X(FuncConvert.ToFSharpFunc(x => x*x));

您应该能够使用静态FSharpFunc.FromConverter方法执行此操作: http//msdn.microsoft.com/en-us/library/ee353520.aspx

ModuleName.X(FSharpFunc.FromConverter(x => x*x));

编辑:我刚刚注意到你的函数调用了一个int -> unit但是你的调用指定了一个int -> int 要创建返回单位的FSharpFunc,可以使用FuncConvert静态类的静态方法之一。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM