لماذا من المهم إعادة تعريف GetHashCode عند إعادة تعريف Equals في C#؟
مرحباً بالجميع! أنا مطور C# مبتدئ، وقد حدث لدي ارتباك مع طرق Equals و GetHashCode.
لقد أنشأت كلاساً بسيطاً `Person` مع حقول `Name` و `Age`. أحتاج إلى اعتبار كائنين متساويين إذا تطابقت هذه الحقول. لذلك قمت بإعادة تعريف طريقة `Equals`:
```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;
}
}
```
كل شيء يعمل بشكل ممتاز عندما أقارن الكائنات مباشرة: `person1.Equals(person2)` يُرجع `true` للبيانات المتطابقة. ولكن عندما حاولت استخدام هذا الكلاس في `HashSet`، لاحظت سلوكاً غريباً. حتى إذا كان كائنان `Person` يحتويان على نفس `Name` و `Age`، فإن `HashSet` يعتبرهما مختلفين ويضيف كليهما. على سبيل المثال:
```csharp
Hash