บ่อยครั้งที่คุณต้องทดสอบตัวแปรที่มีค่าเป็นไปได้หลายค่า เช่น maritalStatus
อาจเป็น 0 สำหรับโสด, 1 สำหรับแต่งงานแล้ว, 2 สำหรับหย่าร้าง, 3 สำหรับหม้าย หรือ 4 สำหรับไม่สนใจ (หวังว่าจะครอบคลุมทุกตัวเลือกแล้ว) เพื่อแยกแยะระหว่างค่าเหล่านี้ คุณสามารถใช้ชุดคำสั่ง if
ดังนี้:
if (maritalStatus == 0)
{
// ต้องโสด ...
// ... ทำบางอย่าง ...
}
else
{
if (maritalStatus == 1)
{
// ต้องแต่งงานแล้ว ...
// ... ทำบางอย่าง ...
}
}
และอื่นๆ
คุณสามารถเห็นได้ว่าการใช้คำสั่ง if
ที่ซ้ำๆ กันนี้จะน่าเบื่อมาก การทดสอบหลายค่าเป็นเหตุการณ์ที่เกิดขึ้นบ่อยครั้งจน C# ได้จัดเตรียมโครงสร้างพิเศษเพื่อการตัดสินใจระหว่างชุดของเงื่อนไขที่เกิดขึ้นเพียงครั้งเดียว คำสั่งนี้คือ switch
ซึ่งทำงานดังนี้:
switch (maritalStatus)
{
case 0:
// ... ทำสิ่งที่เกี่ยวกับโสด ...
break;
case 1:
// ... ทำสิ่งที่เกี่ยวกับแต่งงานแล้ว ...
break;
case 2:
// ... ทำสิ่งที่เกี่ยวกับหย่าร้าง ...
break;
case 3:
// ... ทำสิ่งที่เกี่ยวกับหม้าย ...
break;
case 4:
// ... ออกจากหน้าฉันไป ...
break;
default:
// เข้ามาที่นี่ถ้าไม่สามารถเข้ากรณีไหนได้;
// นี่อาจจะเป็นสถานการณ์ผิดพลาด
break;
}
นิพจน์ที่อยู่ด้านบนของคำสั่ง switch
จะถูกประเมิน ในกรณีนี้ นิพจน์คือค่าของตัวแปร maritalStatus
ค่าของนิพจน์นี้จะถูกเปรียบเทียบกับค่าของแต่ละกรณี การควบคุมจะผ่านไปยังคำสั่ง default
หากไม่มีการจับคู่ใดๆ
การใช้คำสั่ง switch
มีข้อจำกัดดังนี้:
- อาร์กิวเมนต์ของ
switch
ต้องเป็นหนึ่งในชนิดที่สามารถนับได้ (รวมถึงchar
) หรือstring
ไม่รวมค่าจุดลอย - ค่าในแต่ละ
case
ต้องเป็นค่าของชนิดเดียวกับนิพจน์switch
- ค่าใน
case
ต้องเป็นค่าคงที่ในลักษณะที่ค่าของมันต้องเป็นที่รู้ในช่วงเวลาแปลคำสั่ง (เช่น คำสั่งcase x
จะไม่ถูกกฎหมายถ้าx
ไม่ใช่ชนิดของค่าคงที่) - แต่ละ
case
ต้องจบด้วยคำสั่งbreak
(หรือคำสั่งออกอื่นๆ เช่นreturn
) คำสั่งbreak
จะส่งผ่านการควบคุมออกจากswitch
คุณสามารถละเว้นคำสั่ง break
ถ้าสองกรณีนำไปสู่การกระทำเดียวกัน: กรณีเดียวสามารถมีป้ายชื่อ case
มากกว่าหนึ่ง เช่นในตัวอย่างนี้:
string s = "Davis";
switch(s)
{
case "Davis":
case "Rvidsten":
// ทำสิ่งเดียวกันไม่ว่าจะเป็น Davis หรือ Rvidsten
// เพราะพวกเขาเกี่ยวข้องกัน
break;
case "Smith":
// ... ทำสิ่งที่เกี่ยวกับ Smith ...
break;
default:
// มาที่นี่ถ้าไม่ตรงกับกรณีใด ๆ
break;
}