2013-07-21 28 views
6

Sto scrivendo una classe di interoperabilità F # da utilizzare da C#. Ho pensato che F # ha avuto una conversione implicita da .NET Tuple <> tipo (simile a IEnumerable trattati come ss), così ho scritto il seguente codice:Come convertire tra tuple F # e C#?

type MyClass() = 
    member this.MyMethod (t: Tuple<int, int>) = 
     let meaningOfLife (t : int * int) = 42 
     meaningOfLife t 

Questo codice non riesce a compilare con il seguente errore: errore FS0001: questa espressione doveva avere tipo int * int ma qui è di tipo Tuple

Quindi come convertire le tuple tra C# e F # (e ritorno)?

+0

Entrambi i tipi sono diversi. Potresti scrivere 'meaningOfLife (t.item1, t.item2)'. – josejuan

risposta

8

Se si utilizza .NET 4.0 e versioni successive, non è necessario specificare la Tupla dell'oggetto. Le tuple F # vengono automaticamente compilate in Tuple. È possibile utilizzare:

type MyClass() = 
    member this.MyMethod (t: int * int) = 
    let meaningOfLife (t : int * int) = 42 
    meaningOfLife t 

E dovrebbe funzionare bene da C#.

+0

Ovviamente! Era sciocco da parte mia. Grazie per la risposta. –

+0

Tuttavia, non capisco perché l'inferenza di tipo tratta la tupla .NET e la tupla F # in modo diverso. – colinfang