البرمجة

تحسين مقارنة الكائنات في لغة البرمجة C# باستخدام Equals وGetHashCode

بالطبع، يُظهر مشكلتك في تنفيذ الدالة Contains على قائمة من الكائنات من نوع myCustomClass، حيث تحاول مقارنة الكائنات باستخدام المُعيار الافتراضي للمقارنة، الذي قد لا يكون ما تحتاجه في هذه الحالة.

في البداية، يجب أن تعلم أن الدالة Contains تستخدم الميثود Equals للقيام بمقارنة الكائنات. إذا لم تقم بتنفيذ الميثود Equals في فئة myCustomClass، فإنه سيتم استخدام المقارنة الافتراضية التي تعتمد على مقارنة مرجع الكائنات.

لحل هذه المشكلة، يمكنك تنفيذ الميثود Equals بطريقة تأخذ في اعتبارها فقط مقارنة القيمة (Value) دون النظر إلى القائمة (Keys). على سبيل المثال:

csharp
public class myCustomClass { public string Value { get; set; } public List<string> Keys { get; set; } public override bool Equals(object obj) { if (obj == null || GetType() != obj.GetType()) return false; myCustomClass other = (myCustomClass)obj; return Value.Equals(other.Value); } public override int GetHashCode() { return Value.GetHashCode(); } }

بتنفيذ الميثود Equals بهذا الشكل، يمكنك الآن استخدام Contains للبحث عن الكائنات بناءً على مقارنة القيم فقط.

المزيد من المعلومات

في سياق البرمجة، يُعتبر تنفيذ الميثود Equals والتحكم في كيفية مقارنة الكائنات جزءًا هامًا من تعديل سلوك فئتك. عندما تقوم بتنفيذ Equals، يجب عليك ضمان أنها تحقق المقارنة بالشكل الذي يُناسب تطبيقك.

بالنسبة للدالة GetHashCode، يُفضل أيضًا تنفيذها عند تنفيذ Equals. يُستخدم GetHashCode في بعض هياكل البيانات مثل HashSet وDictionary لتحسين أداء البحث.

التنفيذ الذي قدمته في المثال يقوم بمقارنة القيمة (Value) فقط. إذا كنت ترغب في أن تكون المقارنة أكثر تفصيلاً أو تستند إلى شروط معينة، يمكنك تعديل الميثود Equals وفقًا لاحتياجاتك.

على سبيل المثال، إذا كنت ترغب في مقارنة القيمة والتأكد من أن القوائم Keys متطابقة أيضًا، يمكنك توسيع الميثود Equals بشكل ملائم.

في النهاية، فإن فهم كيفية تنفيذ هذه الميثودز يُمكن أحيانًا من تجنب المفاجآت غير المتوقعة عند استخدام وظائف مثل Contains في البرمجة.

زر الذهاب إلى الأعلى