?.
العامل الشرطي الفارغ (?.) ?.
?. يصل لعضو الكائن فقط إن لم يكن 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 الكامل بالعربي.