ca1815: تجاوز يساوي و يساوي العامل تشغيل أنواع القيم

TypeName

OverrideEqualsAndOperatorEqualsOnValueTypes

CheckId

ca1815

Category

Microsoft.الأداء

تعطيل تغيير

غير فاصلة

السبب

نوع القيمة عامة لا يتجاوز Object.Equals، أو لا تطبق عامل تشغيل المساواة (==). هذه قاعدة لا فحص التعدادات.

وصف القاعدة

أنواع القيمة، والتنفيذ الموروثة Equalsيستخدم مكتبة انعكاس، و مقارنة محتويات الجميع حقول. انعكاس هو الثمن الممكن، و comparing كل حقل لمساواة قد تكون غير ضرورية. إذا كنت تتوقع أن المستخدمين إلى مقارنة فرز المثيلات أو استخدامها كتجزئة جدول مفاتيح، نوع القيمة الخاصة بك يجب تنفيذ Equals. إذا كانت لغة برمجة تعتمد التحميل الزائد لعامل التشغيل، يجب أيضا توفير تطبيق عوامل تشغيل مساواة و inequality.

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

إلى إصلاح انتهاكا لهذه قاعدة، قم بتوفير تطبيق Equals. إذا كان ذلك ممكناً، تقوم بتطبيق عامل المساواة.

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

هو آمن لمنع ظهور تحذير من القيم بالموضع هو قاعدة إذا مثيلات نوع القيمة غير ستتم مقارنة ببعضها البعض.

مثال انتهاك

الوصف

يلي مثال عرض بنية (نوع القيمة) يخالف هذه قاعدة.

الرمز

using System; 

namespace Samples
{    
    // Violates this rule    
    public struct Point    
    {        
        private readonly int _X;        
        private readonly int _Y;         

        public Point(int x, int y)        
        {            
            _X = x;            
            _Y = y;        
        }         

        public int X        
        {            
            get { return _X; }        
        }         

        public int Y        
        {            
            get { return _Y; }        
        }    
    }
}

مثال لكيفية إصلاح إلى

الوصف

المثال التالي بإصلاح انتهاك سابق بتجاوز ValueTypeEquals()و تنفيذ عوامل مساواة (= =،! =).

الرمز

using System; 

namespace Samples
{    
    public struct Point : IEquatable<Point>    
    {        
        private readonly int _X;        
        private readonly int _Y;         

        public Point(int x, int y)        
        {            
            _X = x;            
            _Y = y;        
        }         

        public int X        
        {            
            get { return _X; }        
        }         

        public int Y        
        {            
            get { return _Y; }        
        }         

        public override int GetHashCode()        
        {            
            return _X ^ _Y;        
        }         

        public override bool Equals(object obj)        
        {            
            if (!(obj is Point))                
                return false;             

            return Equals((Point)obj);        
        }         

        public bool Equals(Point other)        
        {            
            if (_X != other._X)                
                return false;             

            return _Y == other._Y;        
        }         

        public static bool operator ==(Point point1, Point point2)        
        {            
            return point1.Equals(point2);        
        }         

        public static bool operator !=(Point point1, Point point2)        
        {            
            return !point1.Equals(point2);        
        }    
    }
}

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

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

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

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

راجع أيضًا:

المرجع

Object.Equals