?.=
الإسناد الشرطي الفارغ (?.=) ?.=
منذ C# 14، يمكن استخدام ?. و ?[] على يسار عملية إسناد، فيُنفَّذ الإسناد فقط إذا لم يكن الكائن null، دون فحص if منفصل.
قبل C# 14 كان فحص null قبل الإسناد لخاصية يتطلّب جملة if منفصلة. الآن customer?.Prop = value يفحص customer تلقائيًا: إن كان null يتوقّف التنفيذ ولا يُقيَّم الطرف الأيمن أصلًا (تقييم كسول)، وإلا يتمّ الإسناد بشكل طبيعي.
يعمل مع عوامل الإسناد المركّب مثل += و-= أيضًا، لكن لا يعمل مع ++ أو -- لأنهما ليسا عمليتَي إسناد بنفس المعنى.
الصياغة
obj?.Member = value; obj?.Member += value;
📄 مثال
// قبل C# 14
if (customer is not null)
customer.LastOrderDate = DateTime.Now;
// C# 14
customer?.LastOrderDate = DateTime.Now;أهم النقاط
| العنصر | الوظيفة |
|---|---|
| obj?.Member = v | إسناد يُنفَّذ فقط إن كان obj غير null |
| obj?.Member += v | يعمل أيضًا مع عوامل الإسناد المركّب |
| غير مدعوم | ++ و -- لا يعملان مع ?. |
💡 نصائح عملية
- استخدمه بدل if منفصل عندما يكون الإسناد الوحيد المطلوب داخل الشرط
⚠️ أخطاء شائعة
- توقّع أن الطرف الأيمن يُقيَّم دائمًا — لا يُقيَّم إطلاقًا إن كان الطرف الأيسر null (تقييم كسول)
خصائص ذات صلة
🎓 تريد فهم الصورة الكاملة خطوة بخطوة؟ ابدأ من مسار CSHARP الكامل بالعربي.