web-dev-qa-db-fra.com

Comment sélectionner une surcharge spécifique d'une méthode?

J'appelle une API C # qui utilise des surcharges et des paramètres facultatifs. Malheureusement, l'une des surcharges est une params object[] et f # sélectionne sur une surcharge plus spécifique que j'avais l'intention d'appeler. Comment faire F # Sélectionnez la surcharge que je veux?

Voici une petite repro . et voici un lien vers l'API réelle .

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
2
Asik

Pour appeler la version d'expression avec deux arguments, vous avez besoin:

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

Dans votre code, vous avez effectivement défini une fonction qui renvoie une (3, "") Tuple, qui n'est qu'un seul argument.

5
brianberns