Jak dodać „lub” w instrukcjach switch?

129

Oto, co chcę zrobić:

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

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

Próbowałem z „case: 2 || 5”, ale nie zadziałało.

Celem jest nie pisanie tego samego kodu dla różnych wartości.

Ivan Prodanov
źródło
Co masz na myśli mówiąc „to nie zadziałało”? Czy daje błędy składniowe lub logiczne?
Zack

Odpowiedzi:

324

Układając każdą obudowę przełącznika w stos, osiągasz warunek LUB.

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

    case 7:
    case 12:
    ...
    break;
    ...
}
Jose Basilio
źródło
6
Joel, nie obsługuje przejścia, ale obsługuje układanie w stosy (np. Pusty przypadek 2 w tej odpowiedzi wykonuje sekcję dotyczącą przypadku 5).
paxdiablo
To było dokładnie to, czego szukałem. Dobra robota, twoja praca jest doceniana.
Chris
36

Robisz to, układając etykiety skrzynek :

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

    case 7: 
    case 12:
    ...
    break;
    ...
}
Dave Webb
źródło
19
case 2:
case 5:
do something
break;
Na Freunda
źródło
17

Instrukcje dotyczące wielkości liter automatycznie przechodzą, jeśli nie określisz inaczej (pisząc przerwę). Możesz więc pisać

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

// itd ...}

AnnaR
źródło
5
Zauważ, że dotyczy to tylko pustych skrzynek. Przypadki z prawdziwym ciałem nie przechodzą automatycznie.
Freund
4

Przykład instrukcji switch pokazuje, że nie można umieszczać w stosie niepustych cases, ale należy używać 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.");
   }
}
gimel
źródło
-1 Odsyłacz msdn zawiera przykładowy stos w dalszej części strony. W każdym razie, skumulowane przypadki działają, szczególnie w tym pytaniu, gdzie
podanym
Przydatna odpowiedź na przykładzie „przypadku goto”.
Stef Geysels
Nienawidzę stwierdzeń goto, co to za rok 1992?
Mojżesz