繁体   English   中英

F#2.0中的错误wrt到泛型类型参数的约束?

[英]Bug in F# 2.0 wrt to where constraints in generic type parameters?

如果我有一个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中的一个错误吗?

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

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

根据TB的使用方式,您可以顺利使用

GenericMethodWithTwoTypeParamsThatHaveAWhereClass<BinaryWriter, _>()

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM