我有一个DU,并且我覆盖了Equals方法。基于当前的DU值,我想调用基本相等方法或我的自定义方法。但是,这并不是让我访问“基础”。有任何解决方法的想法吗?
type Test =
| A of string
| B of int64
override this.Equals(other) =
let other' = other :?> Test
match other' with
| A str -> str = "a"
| B i -> base.Equals this other //how do I do this?
答案 0 :(得分:3)
首先,任何受F#歧视的联合都将obj
作为基类,因此只需使用obj.Equals
。
第二, Equals
是一个.NET方法,不是F#函数,因此其参数必须以元组形式给出-即Equals(x,y)
而不是{{1 }}。
最后,如果您实现自定义Equals x y
,则还需要添加Equals
所以:
[<CustomEquality; NoComparison>]