【问题标题】:F# Interop with C# function that has generic return typeF# 与具有通用返回类型的 C# 函数互操作
【发布时间】: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#


【解决方案1】:

来自我的评论:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-12-28
    • 2021-03-05
    • 2015-09-19
    • 2019-04-10
    • 2023-03-07
    • 2012-08-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多