F# 与具有通用 return 类型的 C# 函数互操作

F# Interop with C# function that has generic return type

当我在 C# 中有一个泛型函数时,其中泛型参数仅定义函数的 return 类型,F# 似乎无法推断出泛型参数。我也不知道如何打字注释。

例如下面的C#函数在dapper.net和ServiceStack-ORM-Lite等轻量级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 行):

Lookup on object of indeterminate type based on information prior to this program point. A type annotation may be needed prior to this program point to constrain the type of the object. This may allow the lookup to be resolved.

如何在 F# 中使用这种方法?

来自我的评论:

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

"sql" 无法识别其类型,而不是 return 值。