تخطَّ إلى المحتوى

?? و ??=

عاملا الدمج الفارغ (?? و ??=) ?? و ??=

?? يُرجع القيمة اليسرى إن لم تكن null وإلا يقيّم اليمنى، و ??= يسند القيمة فقط إذا كان المتغيّر null حاليًا.

`??` عامل ثنائي: يفحص الطرف الأيسر، فإن كان غير null يُرجعه كما هو دون تقييم الطرف الأيمن أصلًا (تقييم كسول)، وإن كان null يُرجع الطرف الأيمن.

`??=` (منذ C# 8) يختصر النمط الشائع `if (x == null) x = value;` إلى سطر واحد — يُسند القيمة الجديدة فقط عندما يكون المتغيّر null حاليًا.

الصياغة

leftExpr ?? rightExpr
variable ??= value;

📄 مثال

string? input = null;
string name = input ?? "زائر";      // "زائر"

List<string>? cache = null;
cache ??= new List<string>();        // يُنشأ فقط إن كان null
cache.Add("عنصر");

أهم النقاط

العنصرالوظيفة
a ?? bيُرجع a إن لم يكن null، وإلا b
a ??= bيُسند b لـ a فقط إن كان a يساوي null
تقييم كسولالطرف الأيمن لا يُنفَّذ إن كان الأيسر غير null

💡 نصائح عملية

  • ادمج ?? مع ?. لسلسلة آمنة كاملة: user?.Name ?? "مجهول"

⚠️ أخطاء شائعة

  • الخلط بين ?? (تُرجع قيمة بديلة) والعامل الثلاثي ? : (يحتاج شرطًا منطقيًا كاملًا)

خصائص ذات صلة

🎓 تريد فهم الصورة الكاملة خطوة بخطوة؟ ابدأ من مسار CSHARP الكامل بالعربي.