?? و ??=
عاملا الدمج الفارغ (?? و ??=) ?? و ??=
?? يُرجع القيمة اليسرى إن لم تكن 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 الكامل بالعربي.