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.


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;
    ...
}

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



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 ...}


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.");
   }
}

-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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.