سؤال

ما لم يتجاوز الفئة على وجه التحديد السلوك المحدد للكائن ، 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() يجب استخدامها إذا كنت تعني أن الكائنات لها نفس القيمة (فحص المساواة)
  • ==() يجب أن تستخدم فقط لأنواع غير قابلة للتغيير. ثم استخدمه لاختبار المساواة.

بالطبع ، فإن نظيرات العدوى المقصود وفقًا لذلك.

هنا ملخص

نصائح أخرى

== يجب أن يختبر لمعرفة ما إذا كان المرجع يشير إلى نفس الموقع في حين أن المرجعية يختبرات لمعرفة ما إذا كانت تحتوي على نفس البيانات

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