在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;
}
Run Code Online (Sandbox Code Playgroud)
在F#中我们有这样的记录,但如果我们想要使用继承,则type必须实现.
EqualsF#中的等效实现是什么?
Tom*_*cek 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)
Run Code Online (Sandbox Code Playgroud)