سؤال

أقوم حاليًا بالتحقيق في استخدام FxCop مع أحد مشاريعنا الحالية وأحصل على نتيجة غريبة.

يعرض الإخراج عددًا صغيرًا من الانتهاكات لقاعدة "تجاوز الأساليب على الأنواع القابلة للمقارنة" والتي تنص على أنه "يجب أن يتجاوز "السجل" يساوي نظرًا لأنه يطبق IComparable."

هناك مشكلتان في هذا:

  1. اعتقدت أنه كان من الضروري فقط التنفيذ CompareTo عند التنفيذ IComparable (MSDN نفسها تؤكد ذلك)
  2. الطبقة لا تنفذ IComparable لكن IComparable<T> ولا يتضمن CompareTo كما هو مكتوب بقوة.

إذن فإن FxCop (1.36) يرمي متذبذبًا أم أن ما أفهمه هو خارج نطاق السيطرة هنا..؟

شكرا لك مقدما.

هل كانت مفيدة؟

المحلول

FxCop هي أداة مصابة بجنون العظمة تمامًا ...في هذه الحالة، أفترض أنه يحاول تحذيرك من أنك تقوم بتغيير منطق المقارنة بطريقة ما ويجب ألا تنسى تغيير منطق المساواة إذا لزم الأمر.كما ترى، أحيانًا تُرجع طريقة CompareTo القيمة 0، وهو ما يجب أن يكون متسقًا مع استخدام يساوي.

إذا لم تكن هذه هي حالتك حقًا، وكنت متأكدًا من أنك لا تحتاج إلى أي من التحميل الزائد (مثال في MSDN يوضح أنك ستحتاج إلى تجاوز جميع عوامل المساواة الأخرى أيضًا)...ثم فقط اضغط على التحذير أو قم بتعطيله.

نصائح أخرى

أود أن أتجاوز يساوي،

  • فقط اتصل بـ base.Equals في طريقتك
  • وأضف تعليقًا يوضح سبب كون ما ورد أعلاه هو كل ما هو مطلوب

بهذه الطريقة يكون FxCop سعيدًا، وكذلك المبرمج التالي الذي ينظر إلى الكود الخاص بك.(في حالات قليلة جدًا لا يمكنك القيام بما سبق بسبب مشاكل في النطق، ولكن هذه الحالات نادرة هذه الأيام.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top