เพิ่ม“ หรือ” ในคำสั่ง switch ได้อย่างไร


130

นี่คือสิ่งที่ฉันต้องการทำ:

switch(myvar)
{
    case: 2 or 5:
    ...
    break;

    case: 7 or 12:
    ...
    break;
    ...
}

ฉันลองใช้ "case: 2 || 5" แล้ว แต่ไม่ได้ผล

จุดประสงค์คือไม่เขียนโค้ดเดียวกันสำหรับค่าที่ต่างกัน


คุณหมายถึงอะไร "มันใช้ไม่ได้"? มันทำให้คุณมีข้อผิดพลาดทางไวยากรณ์หรือข้อผิดพลาดทางตรรกะหรือไม่?
Zack

คำตอบ:


325

การซ้อนสวิตช์แต่ละเคสจะทำให้คุณบรรลุเงื่อนไขหรือ

switch(myvar)
{
    case 2:
    case 5:
    ...
    break;

    case 7:
    case 12:
    ...
    break;
    ...
}

6
Joel ไม่รองรับการตก แต่รองรับการซ้อน (เช่นกรณีว่าง 2 ในคำตอบนี้จะเรียกใช้ส่วน case 5)
paxdiablo

นี่คือสิ่งที่ฉันกำลังมองหา ทำได้ดีงานของคุณเป็นที่ชื่นชม
คริส



17

Case-statement จะผ่านไปโดยอัตโนมัติหากคุณไม่ได้ระบุไว้เป็นอย่างอื่น (โดยการเขียนตัวแบ่ง) ดังนั้นคุณสามารถเขียน

switch(myvar)
{
   case 2:
   case 5:
   {
      //your code
   break;
   }

// ฯลฯ ... }


5
โปรดทราบว่านี่เป็นจริงสำหรับเคสเปล่าเท่านั้น เคสที่มีตัวเครื่องจริงจะไม่ตกลงมาโดยอัตโนมัติ
ใน Freund

4

ตัวอย่างสำหรับคำสั่ง switchแสดงว่าคุณไม่สามารถ stack non-empty cases ได้ แต่ควรใช้gotos:

// statements_switch.cs
using System;
class SwitchTest 
{
   public static void Main()  
   {
      Console.WriteLine("Coffee sizes: 1=Small 2=Medium 3=Large"); 
      Console.Write("Please enter your selection: "); 
      string s = Console.ReadLine(); 
      int n = int.Parse(s);
      int cost = 0;
      switch(n)       
      {         
         case 1:   
            cost += 25;
            break;                  
         case 2:            
            cost += 25;
            goto case 1;           
         case 3:            
            cost += 50;
            goto case 1;             
         default:            
            Console.WriteLine("Invalid selection. Please select 1, 2, or3.");            
            break;      
       }
       if (cost != 0)
          Console.WriteLine("Please insert {0} cents.", cost);
       Console.WriteLine("Thank you for your business.");
   }
}

-1 ลิงก์ msdn มีตัวอย่างที่ซ้อนกันอยู่ด้านล่างของหน้า ไม่ว่าในกรณีใดกรณีที่ซ้อนกันจะใช้ได้ผลโดยเฉพาะอย่างยิ่งในคำถามนี้ซึ่งจุดประสงค์ที่ระบุไว้คือการไม่เขียนรหัสซ้ำตามที่ทำในกรณีที่ 1 และ 2 ของคุณ
แกรี่

คำตอบที่เป็นประโยชน์เป็นตัวอย่างของ "goto case"
Stef Geysels

ฉันเกลียดประโยค goto ปี 1992 นี้คืออะไร?
โมเสส
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.