使用F#中的多个参数调用C#函数

V.B*_*.B. 4 .net f#

通过使用,可以很容易地f:Func<'T, 'T>从F#调用'T -> 'Tf.Invoke

但是我该如何f:Func<'T, 'T, 'T>从F#打电话'T -> 'T -> 'T

当我使用时,f.Invoke我得到了'T * 'T -> 'T,即一个元组而不是两个参数.

Tom*_*cek 7

请注意,如果您只想调用它,则无需将该函数转换为带有两个参数的函数.
如果您已经知道该函数的参数,那么您可以将其称为带有元组的函数:

f.Invoke(40, 2)
Run Code Online (Sandbox Code Playgroud)

但是,如果需要将Func<T1, T2, R>委托'T1 -> 'T2 -> 'R传递给需要此类型的curried函数(多参数函数)的代码,则将委托转换为函数仍然很有用.但即使这样,您也可以使用显式lambda来编写它:

functionTakingTwoArgumentFunc (fun a b -> f.Invoke(a, b))
Run Code Online (Sandbox Code Playgroud)

......这正是这样FuncConvert.FuncFromTupled做的.


小智 6

尝试:

let g = f.Invoke |> FuncConvert.FuncFromTupled
Run Code Online (Sandbox Code Playgroud)