F#与C#函数互操作,它具有泛型返回类型

时间:2016-02-12 23:25:55

标签: generics f# interop c#-to-f#

当我在C#中有泛型函数时,泛型参数只定义函数的返回类型,F#似乎无法推断泛型参数。我也不知道如何键入 - 注释这个。

例如,以下C#函数在轻量级ORM中非常常见,例如dapper.net和ServiceStack-ORM-Lite:

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 个答案:

答案 0 :(得分:4)

来自我的评论:

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

它是“sql”,它无法识别类型,而不是返回值。