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

时间:2013-10-10 08:12:10

标签: .net f#

使用f:Func<'T, 'T>

可以轻松地将'T -> 'T从F#调用为f.Invoke

但是,如何将{#1}}从F#调用为f:Func<'T, 'T, 'T>

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

2 个答案:

答案 0 :(得分:7)

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

f.Invoke(40, 2)

Func<T1, T2, R>委托转换为函数'T1 -> 'T2 -> 'R仍然有用,如果您需要将其传递给某些需要此类型的curried函数(多参数函数)的代码。但即使这样,你也可以用一个明确的lambda写出来:

functionTakingTwoArgumentFunc (fun a b -> f.Invoke(a, b))

......这正是FuncConvert.FuncFromTupled所做的。

答案 1 :(得分:6)

尝试:

let g = f.Invoke |> FuncConvert.FuncFromTupled