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

?.

العامل الشرطي الفارغ (?.) ?.

?. يصل لعضو الكائن فقط إن لم يكن null، ويُرجع null تلقائيًا بدل رمي NullReferenceException.

بدل كتابة `if (obj != null) obj.Member` في كل مرة، يفحص `obj?.Member` القيمة تلقائيًا: إن كانت null تتوقف السلسلة بأكملها وتُرجع null، وإلا يكمل الوصول للعضو بشكل طبيعي.

يمكن سلسلته: `a?.B?.C` يتوقف عند أول null في السلسلة دون أن يفحص كل جزء يدويًا.

الصياغة

obj?.Member
obj?[index]

📄 مثال

string? text = null;
int? len = text?.Length;      // null، بلا استثناء

User? user = FindUser("غير موجود");
string? city = user?.Address?.City;   // null إن كان أي جزء null

أهم النقاط

العنصرالوظيفة
obj?.Memberوصول آمن لخاصية أو دالة
obj?[i]وصول آمن لعنصر مصفوفة أو فهرس
سلسلة ?. متتاليةتتوقف عند أول null وتُرجع null

💡 نصائح عملية

  • ادمجه مع ?? لتوفير قيمة افتراضية: text?.Length ?? 0

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

  • استخدام ?. على نوع قيمي غير nullable لا يُنتج الأمان المطلوب — النوع الناتج يصبح Nullable<T> ويحتاج فحصًا بعدها

خصائص ذات صلة

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