تحظى جمل switch بـتاريخ عريق في لغات البرمجة. قُدّمت لأول مرة في C، حيث حظيت بتقدير كبير بسبب سرعتها. لكن تلك السرعة جاءت على حساب الوظائف، التي كانت محدودة للغاية. وفي C# توسّع دور جملة switch ليتجاوز الأعداد الصحيحة، إذ يمكن لجمل switch أن تشمل أي نوع أو قيمة أو مرجع.
إذا كنت قادمًا من لغة برمجة وظيفية، فإن العمل بجمل switch (وتعبيرات switch التي نتناولها في مكان آخر) هو أقرب ما ستصل إليه في C# إلى استخدام الاتحادات المميزة ومطابقة الأنماط. لكنها ليست قريبة بأي حال من قدرة الاتحادات المميزة على فرض أمان الأنواع.
تشبه جمل switch البسيطة أسلافها في C، فهي تجمع بين switch وcase وbreak وdefault.
int direction = GetDirection();
switch (direction)
{
case 1:
GoLeft();
break;
case 2:
GoRight();
break;
default:
MarkTime();
break;
}
يمكن استخدام النمط أعلاه مع أي نوع بسيط (أنواع أولية + سلاسل نصية).
وعندما تُضاف الأنواع المرجعية إلى المعادلة، تدخل صيغة إضافية في اللعب، تُستخدم أولًا للتحويل النازل للنوع، ثم لإضافة شروط الحماية (when)، مع أن شروط الحماية يمكن استخدامها مع حالات القيم البسيطة. ويوضّح المثال التالي ذلك:
Animal animal = GetAnimal();
switch(animal)
{
case Dog canine:
case Coyote canine:
canine.Bark();
break;
case Cat cat when cat.HasOnly8Lives():
cat.IsCareful();
cat.Meow();
break;
case Cat cat:
cat.Meow();
break;
}
default اختيارية لكنها مرغوبة عادةً.break إلزامية في أي جملة case غير فارغة.case يجب أن يكون مشتقًا من نوع وسيط switch. ووسيط switch من النوع Object يسمح بوضوح بأوسع نطاق ممكن.case.case ذات وسائط case مختلفة أن تشير إلى كتلة الكود نفسها.يقدّم توثيق جملة switch مقدمةً إلى جمل switch.