簡體   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