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