在C#中,我将为具有结构相等性的类实现Equals
,如下所示:
public override bool Equals(object obj)
{
if (this == obj)
{
return true;
}
var other = obj as MyType;
if (other != null)
{
return someField == other.someField &&
someOtherField == other.someOtherField;
}
return false;
}
在F#中,我们有这方面的记录,但是如果我们想要使用继承,则必须实现type
。
F#中的等效Equals
实现是什么?
答案 0 :(得分:16)
如评论中所述,您只需覆盖Equals
即可。编译器还会告诉您覆盖GetHashCode
是个好主意。
一个巧妙的技巧是,您可以获取类的所有相关字段,使用它们创建元组,然后比较元组(或获取元组的哈希码)。这使得实现比手动执行操作更容易:
type Person(name:string, age:int) =
member x.Name = name
member x.Age = age
override x.GetHashCode() =
hash (name, age)
override x.Equals(b) =
match b with
| :? Person as p -> (name, age) = (p.Name, p.Age)
| _ -> false
Person("Joe", 42) = Person("Joe", 42)