无法定义运算符

时间:2012-06-17 07:09:41

标签: generics f#

我有以下简单类型:

module Structures
    type Point2D<'T> (x : 'T, y : 'T) =
        member this.X = x
        member this.Y = y
        member this.IsEqualTo (p : Point2D<'T>) =
            (this.X = p.X) && (this.Y = p.Y)

但Visual Studio(2012试用版)在名称“IsEqualTo”下放置一条红色波浪线,在“this.X”下放置一条蓝色波浪线。

红色波浪线的错误信息如下:

  

通用成员IsEqualTo已在此程序点之前的非均匀实例化中使用。考虑重新排序成员,以便首先发生此成员。或者,明确指定成员的完整类型,包括参数类型,返回类型以及任何其他通用参数和约束。

蓝线的消息是:

  

当'T:相等'

时,类型参数缺少约束'

我尝试在所有其他成员之前放置“IsEqualTo”,但错误仍然存​​在。

我猜这个错误与=中的this.X = p.X符号在泛型类型'T上工作的事实有关但我似乎无法纠正它

提前感谢您的帮助。

1 个答案:

答案 0 :(得分:8)

type Point2D<'T when 'T : equality> (x : 'T, y : 'T) =
    member this.X = x
    member this.Y = y
    member this.IsEqualTo (p : Point2D<'T>) =
        (this.X = p.X) && (this.Y = p.Y)