[英]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.