Come aggiungere "o" nelle istruzioni switch?


129

Questo è quello che voglio fare:

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

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

Ho provato con "case: 2 || 5", ma non ha funzionato.

Lo scopo è non scrivere lo stesso codice per valori diversi.


Cosa intendi con "non ha funzionato"? Ti dà errori di sintassi o errori logici?
Zack,

Risposte:


324

Impilando ciascuna custodia, si ottiene la condizione OR.

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

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

6
Joel, non supporta il fall through ma supporta lo stacking (ad esempio, un caso vuoto 2 in questa risposta esegue la sezione caso 5).
paxdiablo,

Questo era esattamente quello che stavo cercando. Ottimo lavoro, il tuo lavoro è apprezzato.
Chris,



17

Le dichiarazioni dei casi cadono automaticamente se non si specifica diversamente (scrivendo break). Quindi puoi scrivere

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

// eccetera... }


5
Si noti che questo vale solo per casi vuoti. I casi con il corpo reale non cadono automaticamente.
Freund,

4

L'esempio per l' istruzione switch mostra che non puoi impilare cases non vuoti , ma dovresti usare 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 Il collegamento msdn ha un esempio in pila più in basso nella pagina. In ogni caso, i casi in pila funzionano, specialmente in questa domanda in cui lo scopo dichiarato è quello di non scrivere codice duplicato come fatto nei casi 1 e 2.
Gary.Ray,

Risposta utile come esempio di "goto case".
Stef Geysels,

Odio andare a dichiarazioni che cos'è questo 1992?
Mosè, il
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.