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
Noch keine Antworten.
Anmelden um eine Antwort zu hinterlassen
Blogs
Arbeiten mit dem Dateisystem in PHP: Vollständiger Leitfaden
CI/CD für Kotlin-Projekte: GitHub Actions von A bis Z
Wie man einen HTTP-Response als String in Go erhält: Best Practices 2025
Arbeiten mit Dateien und dem Dateisystem in Kotlin: Vom Anfänger zum Profi