Avatar ·

لماذا تحتاج إلى إعادة تعريف GetHashCode عند إعادة تعريف Equals في C#؟

مرحباً بالجميع! بدأت في تعلم C# وواجهت موقفاً غير مفهوم. لدي كلاس بسيط `Person` مع حقول `Name` و `Age`. أريد أن يتم اعتبار كائنين متساويين إذا تطابقت هذه الحقول. لذلك قمت بإعادة تعريف طريقة `Equals` في الكلاس الخاص بي. إليك مثال على الكود: ```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; } } ``` كل شيء يعمل بشكل ممتاز عند المقارنة باستخدام `Equals`. لكنني لاحظت أن Visual Studio يصدر تحذيراً: `'Person' overrides Object.Equals(object) but does not override Object.GetHashCode()`. قرأت أنه يجب إعادة تعريف `GetHashCode`، لكنني لا أفهم لماذا. فمنطق المقارنة الخاص بي يعمل على أي حال. هل يمكنكم الشرح بمثال بسيط، ما الذي يمكن أن يتعطل؟