Avatar ·

Warum muss GetHashCode überschrieben werden, wenn Equals in C# überschrieben wird?

Hallo zusammen! Ich habe angefangen, C# zu lernen, und bin auf eine unklare Situation gestoßen. Ich habe eine einfache Klasse `Person` mit den Feldern `Name` und `Age`. Ich möchte, dass zwei Objekte als gleich betrachtet werden, wenn diese Felder übereinstimmen. Deshalb habe ich die Methode `Equals` in meiner Klasse überschrieben. Hier ist ein Beispielcode: ```csharp class Person { public string Name { get; set; } public int Age { get; set; } public override bool Equals(object obj) { if (obj == null || GetType() != obj.GetType()) return false; Person other = (Person)obj; return Name == other.Name && Age == other.Age; } } ``` Alles funktioniert einwandfrei beim Vergleich mit `Equals`. Aber ich habe bemerkt, dass Visual Studio eine Warnung ausgibt: `'Person' überschreibt Object.Equals(object), überschreibt aber nicht Object.GetHashCode()`. Ich habe gelesen, dass man `GetHashCode` überschreiben muss, verstehe aber nicht, warum. Schließlich funktioniert meine Vergleichslogik so. Könnt ihr mir an einem einfachen Beispiel erklären, was schiefgehen kann?