مشاركة عبر


ca2231: يساوي عامل التحميل الزائد تشغيل تجاوز ValueType.Equals

TypeName

OverloadOperatorEqualsOnOverridingValueTypeEquals

CheckId

ca2231

Category

Microsoft.Usage

تعطيل تغيير

غير فاصلة

السبب

تجاوز نوع القيمة Object.Equalsولكن لا تستخدم عامل تشغيل المساواة.

وصف القاعدة

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

لا يمكنك استخدم العامل مساواة الافتراضي في تطبيق overloaded لعامل تشغيل المساواة. ستؤدي هذه العملية في تجاوز سعة مكدس. إلى تنفيذ operaإلىr مساواة، استخدم الأسلوب كائن.يساوي في التطبيق الخاص بك. فعلى سبيل المثال:

If (Object.ReferenceEquals(left, Nothing)) Then
    Return Object.ReferenceEquals(right, Nothing)
Else
    Return left.Equals(right)
End If
if (Object.ReferenceEquals(left, null)) 
    return Object.ReferenceEquals(right, null);
return left.Equals(right);

كيف إلى الإصلاح انتهاكات

إلى إصلاحه انتهاكا لهذه قاعدة، قم بتنفيذ operaإلىr المساواة.

عند إلى منع التحذيرات

هو الأمن لمنع ظهور تحذير من القيم بالموضع هو قاعدة؛ على الرغم من ذلك، نوصي توفير عامل مساواة إذا كان ذلك ممكناً.

مثال

التالي مثال يحدد نوع يخالف هذه قاعدة.

using System;

namespace UsageLibrary
{
    public struct PointWithoutHash
    {
        private int x,y;

        public PointWithoutHash(int x, int y)
        {
            this.x = x;
            this.y = y;
        }

        public override string ToString()
        {
            return String.Format("({0},{1})",x,y);
        }

        public int X {get {return x;}}

        public int Y {get {return x;}}

        // Violates rule: OverrideGetHashCodeOnOverridingEquals.
        // Violates rule: OverrideOperatorEqualsOnOverridingValueTypeEquals.
        public override bool Equals (object obj)
        {
            if (obj.GetType() != typeof(PointWithoutHash))
                return false;

            PointWithoutHash p = (PointWithoutHash)obj;   
            return ((this.x == p.x) && (this.y == p.y));
        }

    }

}

القواعد ذات الصلة

حفظ معلومات الرمز مع إنشاء تشكيل جانبي لملفات بيانات ca2116:

CA2223: Members should differ by more than return type

الوحدات النمطية لعرض-أخذ عينات ca1020:

ca2224: يساوي التجاوز تشغيل التحميل الزائد يساوي عامل التشغيل

ca2218: يمنع GetHashCode تشغيل يمنع يساوي

راجع أيضًا:

المرجع

Object.Equals