我遇到了一个问题,涉及到我重写了一个类的GetHashCode和Equals方法。我使用操作符“==”来验证两个对象是否相等,我期望当它们的哈希码相同时,这应该会调用它们的GetHashCode和Equals方法以验证它们确实相等。
但令我惊讶的是,这两个方法都没有被调用,而相等性测试的结果为false(而实际上应该是true)。
我的重写代码如下:
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