【发布时间】:2016-02-12 23:25:54
【问题描述】:
当我在 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# 中使用这种方法?
【问题讨论】:
-
这有帮助吗?让 GetCustomer (sql : string) : Customer = ...
-
是的!这样可行。这很奇怪,因为它正确地将 sql 推断为字符串。发布您的答案并不接受。
标签: generics f# interop c#-to-f#