6

C# から使用する F# 相互運用クラスを作成しています。F# には .NET Tuple<> 型からの暗黙的な変換 (IEnumerable が seq として扱われるのと同様) があると考えたので、次のコードを書きました。

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

このコードは次のエラーでコンパイルに失敗します: error FS0001: This expression was expected to have type int * int but here has type Tuple

次に、タプルを C# と F# の間で (およびその逆に) 変換する方法を教えてください。

4

1 に答える 1

8

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

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

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

于 2013-07-21T19:34:43.337 に答える