سؤال

هذا السؤال سبق الجواب هنا:

كنت أتساءل عن ?? علامات في C# التعليمات البرمجية.ما هو ؟ وكيف يمكنني استخدامه ؟

ماذا عن int??هل هو nullable int ؟

انظر أيضا:

??Null ائتلافه المشغل —> ما ائتلافه يعني ؟

هل كانت مفيدة؟

المحلول

يطلق عليه "عامل الدمج الفارغ" ويعمل على النحو التالي:

بدلاً من القيام بما يلي:

int? number = null;
int result = number == null ? 0 : number;

يمكنك الآن فقط القيام بما يلي:

int result = number ?? 0;

نصائح أخرى

انها null ائتلافه المشغل.وقد عرض في C# 2.

نتيجة التعبير a ?? b هو a إذا هذا ليس null, أو b خلاف ذلك. b لا تقيم إلا إذا كان هناك حاجة.

اثنين من الأشياء الجميلة:

  • عموما هو نوع من التعبير هو أن من المعامل الثاني ، وهو أمر مهم عندما كنت تستخدم nullable القيمة أنواع:

    int? maybe = ...;
    int definitely = maybe ?? 10;
    

    (لاحظ أنه لا يمكنك استخدام غير nullable القيمة نوع المعامل الأول سيكون لا طائل منه.)

  • على ترابطيات القواعد يعني أنك يمكن أن سلسلة هذه الحقيقة بسهولة.على سبيل المثال:

    string address = shippingAddress ?? billingAddress ?? contactAddress;
    

التي سوف تستخدم لأول مرة قيمة غير فارغة من الشحن والفواتير أو عنوان الاتصال.

هذا هو مشغل الدمج.وهو في الأساس اختصار لما يلي

x ?? new Student();
x != null ? x : new Student();

وثائق MSDN على المشغل

إنه عامل Null Coalesce الجديد.

ال ؟؟يقوم عامل التشغيل بإرجاع المعامل الأيسر إذا لم يكن فارغًا، وإلا فإنه يقوم بإرجاع المعامل الأيمن.

يمكنك القراءة عنه هنا:http://msdn.microsoft.com/en-us/library/ms173224(VS.80).aspx

وهو اختصار لـ:

Text = (category == null ? "Home" : category);

إنه مشغل التجميع.ستُرجع قيمة أخرى إذا كانت القيمة الأولى فارغة

string value1 = null;
string value2 = "other";

string value3 = value1 ?? value2; // assigns "other" to value 3

يتحقق مما إذا كانت الفئة فارغة - وفي هذه الحالة، يتم استبدال القيمة الخالية بـ "الصفحة الرئيسية".

أحد استخداماتي المفضلة لمشغل الاندماج الفارغ هو تجنب العبارات الموجودة في الكود الخاص بي (أعتقد أن العبارات قبيحة وتتسبب في فوضى الأشياء في معظم الأوقات).على سبيل المثال، خذ سيناريو نموذجيًا حيث يمكن للمرء اختيار تحميل شيء ما من ذاكرة التخزين المؤقت إذا كان ذلك متاحًا، وإلا قم بالتحميل من قاعدة البيانات وملء ذاكرة التخزين المؤقت.

private SomeData GetData() {
    var data = HttpRuntime.Cache.Get("key") as SomeData;

    if (data == null) {
        data = DAL.GetData(some parameters...);
        HttpRuntime.Cache.Add("key", data, ....);
    }

    return data;
}

بالنسبة لي، هذا رمز قبيح.قد أكون شرجيًا بعض الشيء، لكن لماذا لا أعيد تصميمه على هذا بدلاً من ذلك؟

private SomeData GetDataAndCache() {
    var data = DAL.GetData(some parameters...);
    HttpRuntime.Cache.Add("key", data, ....);
    return data;
}

private SomeData GetData() {
    var data = HttpRuntime.Cache.Get("key") as SomeData;
    return data ?? GetDataAndCache();
}

إنه يتبع بشكل وثيق SRP وهو أكثر نظافة وأسهل في القراءة، IMO.تؤدي الوظائف وظيفة واحدة محددة بوضوح لكل منها.

إذا كانت الفئة فارغة، فسيصبح النص "الصفحة الرئيسية"

إرجاع القيمة الأولى غير الخالية.مفيد.

؟؟عامل الدمج الفارغ

كثافة العمليات؟هو int لاغٍ، مما يعني أنه يمكن أن يحتوي على قيم int عادية وnull.يقرأ هذا للتفاصيل.

هذا هو عامل الدمج الخالي .يتم استخدامه مع أنواع لاغية (من بين أمور أخرى، آسف :)

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