1. switch case التقليدي

الـ switch case التقليدي بيتعامل مع شروط أكتر بشكل تدريجي وبيحتاج شوية كتابة أكتر.

مثال:

int number = 2;
string result;
 
switch (number)
{
    case 1:
        result = "One";
        break;
    case 2:
        result = "Two";
        break;
    case 3:
        result = "Three";
        break;
    default:
        result = "Unknown";
        break;
}
 
Console.WriteLine(result);  // هتطلع: Two

في المثال ده:

  • لو الرقم كان 2 هيطلع “Two”.
  • لو الرقم مش 1، 2، أو 3 هيطلع “Unknown”.
  • في النهاية بنستخدم break علشان نخرج من الـ switch.

2. switch expression الحديثة

أما في switch expression، إحنا بنقدر نكتب code بشكل أكتر اختصارًا وبطريقة أنظف.

نفس المثال باستخدام switch expression:

int number = 2;
 
var result = number switch
{
    1 => "One",
    2 => "Two",
    3 => "Three",
    _ => "Unknown"
};
 
Console.WriteLine(result);  // هتطلع: Two

في المثال ده:

  • إحنا مش محتاجين نكتب break، لأنه بيتم تحديد النتيجة على طول.
  • بنستخدم _ كـ “catch-all” للـ default.

الفرق بين الاتنين:

  1. الاختصار: في الـ switch expression بنكتب كود أقصر وأوضح.
  2. الـ break: في الـ switch case لازم تستخدم break بعد كل حالة عشان توقف الـ case، لكن في الـ switch expression مفيش داعي لـ break، لأنه بيرجع النتيجة بشكل مباشر.
  3. الأنماط المتقدمة: في الـ switch expression تقدر تستخدم أنماط زي when أو الـ types مثلاً، زي ما هنشوف في المثال الجاي.

مثال آخر باستخدام switch expression مع when:

object obj = 42;
 
var result = obj switch
{
    int n when n > 0 => "Positive Integer",
    int n when n < 0 => "Negative Integer",
    string s => "String",
    _ => "Other"
};
 
Console.WriteLine(result);  // هتطلع: Positive Integer

هنا بنقدر نحدد شرط زي when n > 0، وده مش ممكن في الـ switch case التقليدي إلا لو كتبنا شرط داخل الـ case نفسه.


باختصار، switch expression بتدي كتابة أكتر نظافة واختصار، وبتتيح استخدام أنماط متقدمة زي when و_ بشكل مباشر.