只需使用 Resharper 为您创建 Equals 和 GetHashCode 方法。它为此目的创建了最全面的代码。
更新
我不是故意发布的——我更喜欢人们使用 Resharper 的功能而不是复制粘贴,因为代码从一个类到另一个类会发生变化。至于在没有 Resharper 的情况下开发 C# - 我不明白你是怎么生活的,伙计。
无论如何,这是一个简单类的代码(由旧版本 Resharper 3.0 生成 - 我有 4.0 在工作,我目前不记得它是否创建相同的代码)
public class Foo : IEquatable<Foo>
{
public static bool operator !=(Foo foo1, Foo foo2)
{
return !Equals(foo1, foo2);
}
public static bool operator ==(Foo foo1, Foo foo2)
{
return Equals(foo1, foo2);
}
public bool Equals(Foo foo)
{
if (foo == null) return false;
return y == foo.y && x == foo.x;
}
public override bool Equals(object obj)
{
if (ReferenceEquals(this, obj)) return true;
return Equals(obj as Foo);
}
public override int GetHashCode()
{
return y + 29*x;
}
private int y;
private int x;
}