Avatar ·

Warum ist es wichtig, GetHashCode zu überschreiben, wenn Equals in C# überschrieben wird?

Hallo zusammen! Ich bin ein Anfänger in C# und bin verwirrt über die Methoden Equals und GetHashCode. Ich habe eine einfache Klasse `Person` mit den Feldern `Name` und `Age` erstellt. Ich möchte, dass zwei Objekte als gleich betrachtet werden, wenn diese Felder übereinstimmen. Deshalb habe ich die Methode `Equals` überschrieben: ```csharp public 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, wenn ich Objekte direkt vergleiche: `person1.Equals(person2)` gibt `true` für identische Daten zurück. Aber als ich versuchte, diese Klasse in einem `HashSet` zu verwenden, bemerkte ich ein seltsames Verhalten. Selbst wenn zwei `Person`-Objekte denselben Name und dasselbe Age enthalten, betrachtet `HashSet` sie als unterschiedlich und fügt beide hinzu. Zum Beispiel: ```csharp Hash