У меня возникла проблема с GetHashCode и Equals, которые я переопределил для класса. Я использую оператор ==, чтобы убедиться, что оба они равны, и я ожидаю, что это вызовет как GetHashCode, так и Equals, если их хэш-код будет одинаковым, чтобы проверить, действительно ли они равны.C# GetHashCode/Equals override not called
Но, к моему удивлению, ни вызов, ни результат теста равенства не являются ложными (хотя это должно быть истинно).
код Override:
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
Там нет ничего в коде вы показываете, что это указывает на необходимость вызова GetHashCode(). Это называется только, если вы используете свой объект в качестве ключа коллекции. – RenniePet