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 تشغيل يمنع يساوي