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

?.=

الإسناد الشرطي الفارغ (?.=) ?.=

منذ 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 الكامل بالعربي.