Como adicionar "ou" nas instruções do switch?


129

Isto é o que eu quero fazer:

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

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

Eu tentei com "case: 2 || 5", mas não funcionou.

O objetivo é não escrever o mesmo código para valores diferentes.


Como assim "não funcionou"? Isso fornece erros de sintaxe ou erros lógicos?
Zack

Respostas:


324

Ao empilhar cada caixa de chave, você obtém a condição OR.

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

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

6
Joel, ele não suporta falhas, mas suporta empilhamento (por exemplo, um caso vazio 2 nesta resposta executa a seção caso 5).
21411

Era exatamente isso que eu estava procurando. Bom trabalho, seu trabalho é apreciado.
Chris



17

As declarações de caso são automaticamente excluídas se você não especificar o contrário (escrevendo break). Para isso você pode escrever

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

// etc ...}


5
Observe que isso só é verdade para casos vazios. Casos com o corpo real não caem automaticamente.
Em Freund

4

O exemplo da instrução switch mostra que você não pode empilhar cases não vazios , mas deve usar 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 O link msdn tem um exemplo empilhado mais abaixo na página. De qualquer forma, casos empilhados trabalho, especialmente nesta questão, onde o propósito declarado é não escrever código duplicado como feito no seu caso 1 e 2.
Gary.Ray

Resposta útil como exemplo de "ir para o caso".
Stef Geysels

Eu odeio goto declarações o que é isso 1992?
Moses
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.