تكرار السؤال: …
الإجابة المختصرة
أصبحت تدعم أنماط الخصائص (Property Patterns)، والأنماط الموضعية (Positional)، والأنماط العلائقية (Relational)، والـ List Patterns لصياغة شروط معقدة بسلاسة وأمان.
الشرح
تعبيرات switch الحديثة تسمح بفحص أنواع وهياكل الكائنات بدقة عالية. يمكنك فحص نطاقات الأرقام (>= 10 and <= 50)، أو فحص خصائص متداخلة دون استخراجها يدوياً (Order { Customer.IsVip: true, Total: > 100 })، وتضمن التحقق الشامل (Exhaustiveness checking) حيث ينبهك المترجم إذا لم تغطِ جميع الاحتمالات الممكنة.
مثال بالكود
public static decimal GetDiscount(Customer customer) => customer switch {
{ IsVip: true, TotalOrders: > 10 } => 0.20m,
{ IsVip: true } => 0.10m,
{ TotalOrders: > 5 } => 0.05m,
_ => 0.00m
};أخطاء شائعة
- نسيان الحالة الافتراضية _ (Discard) في تعبير switch مما يرمي SwitchExpressionException وقت التشغيل عند وصول قيمة غير متوقعة.