如何选择方法的特定重载?

Asi*_*sik 3 f#

我正在调用一个使用重载和可选参数的 C# API。不幸的是,其中一个重载是 a params object[],F# 选择它而不是我打算调用的更具体的重载。如何让 F# 选择我想要的重载?

这是一个小复制品这里是实际 API 的链接

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)

bri*_*rns 5

要使用两个参数调用表达式版本,您需要:

let result = S.Foo((fun () -> 3), "")
Run Code Online (Sandbox Code Playgroud)

在您的代码中,您实际上定义了一个返回元组的函数(3, ""),该元组只是一个参数。