2013-07-21 34 views
6

我在寫C#中使用的F#interop類。我認爲,F#不得不從.NET元組<的隱式轉換>型(類似的IEnumerable爲SEQ處理的),所以我寫以下代碼:如何轉換F#和C#元組?

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

此代碼失敗,出現以下錯誤編譯: 錯誤FS0001:此表達式預計有類型int * int但這裏有類型Tuple

那麼如何轉換C#和F#(和後退)之間的元組?

+0

兩種類型都不同。你可以寫'意思生活(t.item1,t.item2)'。 – josejuan

回答

8

如果您的目標是.NET 4.0及更高版本,則不需要指定對象元組。 F#元組會自動編譯爲元組。你可以使用:

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

它應該可以在C#中正常工作。

+0

當然!這真是愚蠢的我。感謝你的回答。 –

+0

不過,我不明白爲什麼類型推理將.NET tuple和F#元組區分開來。 – colinfang