如何 select 方法的特定重载?

How to select a specific overload of a method?

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

Here's a small repro. And here is a link to the actual 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

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

let result = S.Foo((fun () -> 3), "")

在您的代码中,您实际上定义了一个 returns 一个 (3, "") 元组的函数,它只有一个参数。