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.