Ich habe ein Problem mit GetHashCode und Equals, die ich für eine Klasse überschrieben habe. Ich verwende den Operator ==, um zu überprüfen, ob beide gleich sind, und ich würde erwarten, dass dies sowohl GetHashCode als auch Equals aufrufen würde, wenn deren Hash-Code identisch ist, um zu bestätigen, dass sie tatsächlich gleich sind.C# GetHashCode/Equals Override nicht aufgerufen
Aber zu meiner Überraschung, werden beide nicht aufgerufen und das Ergebnis der Gleichheitsprüfung ist falsch (während es tatsächlich wahr sein sollte).
Aufhebungscode:
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;
}
}
Equality-Check:
if (x == y) // x and y are both of the same User class
// I'd expect this test to call both GetHashCode and Equals
Wenn die '==' in der Tat hat die 'Equals' Methode aufrufen, dann würde es einen Stapelüberlauf verursachen, da sie die' == 'Operator auf dem Objekt verwendet ... – Guffa
Es im Code ist nichts Sie zeigen, dass dies einen Aufruf von GetHashCode() anzeigen würde. Dies wird nur aufgerufen, wenn Sie Ihr Objekt als Schlüssel einer Sammlung verwenden. – RenniePet