Avatar ·

لماذا من المهم إعادة تعريف 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