我正面臨着GetHashCode和Equals的問題,這些問題我已被一個類覆蓋。我使用運算符==來驗證兩者是否相等,如果它們的哈希碼相同以便驗證它們確實相等,我預計這將調用GetHashCode和Equals。C#GetHashCode /等於重寫不被調用
但令我吃驚的是,既沒有被調用,平等測試的結果也是錯誤的(儘管它應該是真的)。
覆蓋代碼:
public class User : ActiveRecordBase<User>
[...]
public override int GetHashCode()
{
return Id;
}
public override bool Equals(object obj)
{
User user = (User)obj;
if (user == null)
{
return false;
}
return user.Id == Id;
}
}
相等性檢查:
if (x == y) // x and y are both of the same User class
// I'd expect this test to call both GetHashCode and Equals
如果'其實=='沒打電話給你'Equals'方法,那麼它會導致堆棧溢出,因爲它使用了''==操作符的對象... – Guffa 2010-11-06 23:05:40
沒有什麼代碼你表明需要調用GetHashCode()。只有在您將對象用作集合的關鍵字時纔會調用它。 – RenniePet 2014-06-29 02:12:56