我正在调用一个使用重载和可选参数的 C# API。不幸的是,其中一个重载是 a params object[]
,F# 选择它而不是我打算调用的更具体的重载。如何让 F# 选择我想要的重载?
open System
open System.Linq.Expressions
type S =
static member Foo(expression: Expression<Func<int>>, ?gg: string) =
"expression"
static member Foo([<ParamArray>] args: obj[]) =
"params array"
[<EntryPoint>]
let main argv =
// This prints "params array", but I want it to print "expression"
let result = S.Foo(fun () -> 3, "")
printfn "%s" result
0
Run Code Online (Sandbox Code Playgroud)
要使用两个参数调用表达式版本,您需要:
let result = S.Foo((fun () -> 3), "")
Run Code Online (Sandbox Code Playgroud)
在您的代码中,您实际上定义了一个返回元组的函数(3, "")
,该元组只是一个参数。