প্রোগ্রামিং ভাষায় 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 ক্লজটি ঐচ্ছিক, তবে সাধারণত কাম্য।case ক্লজে break স্টেটমেন্ট অবশ্যই থাকতে হবে।case লেবেলের সব আর্গুমেন্টের টাইপ switch আর্গুমেন্টের টাইপ থেকে উদ্ভূত হতে হবে। Object টাইপের switch আর্গুমেন্টে স্পষ্টতই সবচেয়ে বেশি ধরনের মান দেওয়া যায়।case আর্গুমেন্টের সদস্য নয়।case আর্গুমেন্টযুক্ত একাধিক case একই কোড ব্লককে নির্দেশ করতে পারে।switch স্টেটমেন্টের ডকুমেন্টেশনে switch স্টেটমেন্টের একটি পরিচিতি পাওয়া যায়।