3

如果我有一个想从 F# 使用的 C# 方法并接收两个这样的类型化参数:

public class Foo
{
    public static void GenericMethodWithTwoTypeParamsThatHaveAWhereClass<TA, TB>() where TA : TB
    {

    }
}

当我尝试通过 F# 调用它时,编译器会抱怨:

Foo.GenericMethodWithTwoTypeParamsThatHaveAWhereClass<System.IO.BinaryWriter, System.IDisposable>()

那么,这是 F# 2.0 中的错误吗?

4

1 回答 1

2

F# 不支持这种类型的约束。规范表明表单的约束被t1 :> t2视为t1 = t2,这解释了您的错误:

此表达式应具有 BinaryWriter 类型,但此处具有 System.IDisposable 类型

根据TB使用方式,您可能可以通过

GenericMethodWithTwoTypeParamsThatHaveAWhereClass<BinaryWriter, _>()

TB将被推断为BinaryWriter,根据上述规则。但是,如果这可行,那么您的 C# 方法可能会使用一种类型参数。

于 2012-08-20T15:35:28.693 回答