如果我有一个C#方法,我想从F#中使用它并接收两个类似的参数:
public class Foo
{
public static void GenericMethodWithTwoTypeParamsThatHaveAWhereClass<TA, TB>() where TA : TB
{
}
}
当我尝试通过F#调用它时,编译器会抱怨:
Foo.GenericMethodWithTwoTypeParamsThatHaveAWhereClass<System.IO.BinaryWriter, System.IDisposable>()
那么,这是F#2.0中的一个错误吗?
答案 0 :(得分:2)
F#不支持此类约束。 spec表示t1 :> t2
形式的约束被视为t1 = t2
,这解释了您的错误:
此表达式应具有类型BinaryWriter,但此处具有类型System.IDisposable
根据TB
的使用方式,您可以使用
GenericMethodWithTwoTypeParamsThatHaveAWhereClass<BinaryWriter, _>()
根据上述规则, TB
将被推断为BinaryWriter
。但是,如果可行,那么您的C#方法可能会使用一种类型的参数。