! (مرجعية ()) مقابل! = في إطار الكيان 4
-
27-09-2019 - |
سؤال
ما لم يتجاوز الفئة على وجه التحديد السلوك المحدد للكائن ، referequals و == افعل نفس الشيء... قارن المراجع.
في مستقديات الممتلكات ، لقد استخدمت النمط بشكل شائع
private MyType myProperty;
public MyType MyProperty
{
set
{
if (myProperty != value)
{
myProperty = value;
// Do stuff like NotifyPropertyChanged
}
}
}
ومع ذلك ، في الكود الناتج عن إطار الكيان ، if
يتم استبدال البيان بـ
if (!ReferenceEquals(myProperty, value))
يعد استخدام ReferenceEquals أكثر وضوحًا (كما أعتقد أنه لا يعرف جميع المبرمجين C# أن == يفعل نفس الشيء إذا لم يتم تجاوزه).
هل هناك أي اختلاف يهرب مني بين اثنين من الأمنين؟ هل هم ربما يمثلون احتمال أن يكون مصممو POCO قد تجاوزوا ==
?
باختصار ، إذا لم أكن قد تجاوزت ==
, ، هل أنا حفظ باستخدام! = بدلا من ReferenceEquals()
?
المحلول
فيما يلي دلالات مختلفة:
ReferenceEquals()
يجب استخدامها إذا كنت تقصد أن الكائنات هي نفسها بالضبط (فحص الهوية).object.Equals()
يجب استخدامها إذا كنت تعني أن الكائنات لها نفس القيمة (فحص المساواة)==()
يجب أن تستخدم فقط لأنواع غير قابلة للتغيير. ثم استخدمه لاختبار المساواة.
بالطبع ، فإن نظيرات العدوى المقصود وفقًا لذلك.
نصائح أخرى
== يجب أن يختبر لمعرفة ما إذا كان المرجع يشير إلى نفس الموقع في حين أن المرجعية يختبرات لمعرفة ما إذا كانت تحتوي على نفس البيانات