2016-02-12 46 views
2

當我在C#中有一個泛型函數時,泛型參數僅定義函數的返回類型,F#似乎無法推斷泛型參數。我也不知道如何輸入註釋。F#與具有通用返回類型的C#函數進行互操作

例如,下面的C#功能是輕量級的ORM,如dapper.net和ServiceStack-ORM-精簡版非常普遍:

public T Get<T>(string sql) 
{ 
    //.... 
    var obj = Activator.CreateInstance<T>(); 
    //.... 
    return obj; 
} 

讓說,我試着在F#中使用這個......先按類型推斷:

let GetCustomer sql : Customer = 
    MyCSharpObj.Get(sql) 

或者說,我試着註釋類型(甚至不知道這句法是正確的):

let GetCustomer sql : Customer = 
    MyCSharpObj.Get<Customer>(sql) 

在這兩種情況下,我得到的編譯錯誤(在MyCSharpObj.Get行):根據在此之前的程序點信息上不確定的類型的對象

查找。在此程序點之前可能需要類型註釋來約束對象的類型。這可能會使查找得到解決。

如何在F#中使用這種方法?

+1

這有幫助嗎?讓GetCustomer(sql:string):Customer = ... – Foole

+0

是的!這樣可行。這很奇怪,因爲它正確地將sql推斷爲一個字符串。發佈你的答案並接受不滿。 –

回答

4

從我的評論:

let GetCustomer (sql : string) : Customer = .. 

它是「SQL」是具有識別,而不是返回值的類型麻煩。