خاصية switch في لغة C# هي عبارة تحكم تسمح لك باختيار تنفيذ جزء من التعليمات البرمجية بناءً على قيمة متغير أو تعبير. تُستخدم عادةً كبديل أنظف وأكثر كفاءة لسلسلة طويلة من عبارات if-else if.

بنية switch الأساسية:

C#
switch (التعبير)
{
case القيمة_1:
// تنفيذ التعليمات البرمجية إذا كان التعبير يساوي القيمة_1
break;
case القيمة_2:
// تنفيذ التعليمات البرمجية إذا كان التعبير يساوي القيمة_2
break;
case القيمة_3:
// تنفيذ التعليمات البرمجية إذا كان التعبير يساوي القيمة_3
break;
default:
// تنفيذ التعليمات البرمجية إذا لم يتطابق التعبير مع أي من القيم السابقة (اختياري)
break;
}
  • التعبير: هو المتغير أو التعبير الذي سيتم تقييمه. يجب أن يكون من نوع يمكن مقارنته (مثل int، string، char، enum).
  • case القيمة_n: تحدد قيمة معينة سيتم مقارنة التعبير بها. إذا تطابق التعبير مع إحدى هذه القيم، سيتم تنفيذ التعليمات البرمجية الموجودة داخل هذا case.
  • break;: تُستخدم للخروج من عبارة switch بعد تنفيذ التعليمات البرمجية المطابقة. مهم جدًا: في معظم الحالات، يجب أن يكون هناك break في نهاية كل case. إذا لم يكن موجودًا، سيستمر التنفيذ في case التالي (يُعرف هذا باسم "المرور")، وهو سلوك قد يكون غير مرغوب فيه في كثير من الأحيان.
  • default:: (اختياري) يُستخدم لتحديد التعليمات البرمجية التي سيتم تنفيذها إذا لم يتطابق التعبير مع أي من قيم case السابقة.

مثال بسيط:

C#
int dayOfWeek = 3;
string dayName;

switch (dayOfWeek)
{
case 1:
dayName = "الاثنين";
break;
case 2:
dayName = "الثلاثاء";
break;
case 3:
dayName = "الأربعاء";
break;
case 4:
dayName = "الخميس";
break;
case 5:
dayName = "الجمعة";
break;
case 6:
dayName = "السبت";
break;
case 7:
dayName = "الأحد";
break;
default:
dayName = "رقم يوم غير صالح";
break;
}

Console.WriteLine($"اليوم هو: {dayName}"); // سيطبع: اليوم هو: الأربعاء

ميزات إضافية في C#:

  • الأنماط (Patterns) في switch (C# 7.0 والإصدارات الأحدث): تسمح لك باستخدام أنماط أكثر تعقيدًا في حالات case، مثل التحقق من أنواع المتغيرات أو القيم في نطاقات معينة.
C#
object obj = 123;

switch (obj)
{
case int i when i > 100:
Console.WriteLine("عدد صحيح أكبر من 100");
break;
case string s:
Console.WriteLine("نص");
break;
case null:
Console.WriteLine("قيمة فارغة");
break;
default:
Console.WriteLine("نوع غير معروف");
break;
}
  • التعبيرات switch (C# 8.0 والإصدارات الأحدث): توفر صيغة أكثر اختصارًا ووضوحًا لـ switch، تُستخدم غالبًا في تعيين القيم.
C#
int dayOfWeek = 3;

string dayName = dayOfWeek switch
{
1 => "الاثنين",
2 => "الثلاثاء",
3 => "الأربعاء",
4 => "الخميس",
5 => "الجمعة",
6 => "السبت",
7 => "الأحد",
_ => "رقم يوم غير صالح" // _ يمثل الحالة الافتراضية
};

Console.WriteLine($"اليوم هو: {dayName}"); // سيطبع: اليوم هو: الأربعاء

متى تستخدم switch؟

  • عندما يكون لديك متغير أو تعبير واحد تريد اختباره مقابل عدة قيم ثابتة.
  • عندما تريد تجنب سلسلة طويلة من عبارات if-else if، مما يجعل التعليمات البرمجية أكثر قابلية للقراءة والصيانة