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?