我有以下對象。比較對象,忽略成員的「訂單」
public class Foo
{
public int X { get; }
public int Y { get; }
public Foo(int x, int y)
{
this.X = x;
this.Y = y;
}
}
現在我想重載Equals和GetHashCode方法,其中這兩個物體應被視爲相等(和相同的哈希碼)。
var foo1 = new Foo(1, 2);
var foo2 = new Foo(2, 1);
我知道如何編寫Equals方法,但我與獲取散列碼方法鬥爭。
這就是我目前的版本:
public override int GetHashCode()
{
unchecked
{
return (_x * 397)^_y;
}
}
在我目前的 - 不工作的解決方案 - foo1有399的散列碼和foo2的有795
我需要兩個是相同的。
你爲什麼不檢查之前如果 –
如果順序真的沒有關係,爲什麼不總是在構造函數中將最小值賦給x,將最大值賦給y? – juharr
@juharr沒有想過它,但它的一部分約翰吳的回答 –