2013-07-21 4 views
6

私はC#から使用するF#interopクラスを作成しています。私は(IEnumerableをに似ては、配列として扱われる)タイプ> F#が.NETタプル<からの暗黙的な変換を持っていたと思ったので、私は次のコードを書いた:F#とC#タプルの間の変換方法?

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

このコードは、次のエラーでコンパイルに失敗します。 エラーFS0001:この式はint * int型であると予想されましたが、ここに型タプルがあります

次にC#とF#の間でタプルを変換する方法を教えてください。

+0

両方のタイプが異なります。あなたは 'meaningOfLife(t.item1、t.item2)'と書くことができます。 – josejuan

答えて

8

.NET 4.0以上をターゲットにしている場合は、オブジェクトタプルを指定する必要はありません。 F#タプルは自動的にTupleにコンパイルされます。あなたは使用することができます:

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

そして、それはC#から正常に動作するはずです。

+0

もちろん!それは私の愚かだった。答えをありがとう。 –

+0

まだ、私は実際には、型推論が.NETタプルとF#タプルを異なるものとして扱う理由を知りません。 – colinfang

関連する問題