¿Cómo agregar "o" en las declaraciones de cambio?


129

Esto es lo que quiero hacer:

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

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

Intenté con "case: 2 || 5", pero no funcionó.

El propósito es no escribir el mismo código para diferentes valores.


¿Qué quieres decir con "no funcionó"? ¿Le da errores de sintaxis o errores lógicos?
Zack

Respuestas:


324

Al apilar cada caja de interruptor, se logra la condición OR.

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

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

66
Joel, no admite fallas, pero admite el apilamiento (por ejemplo, un caso vacío 2 en esta respuesta ejecuta la sección del caso 5).
paxdiablo

Esto era exactamente lo que estaba buscando. Buen trabajo, tu trabajo es apreciado.
Chris



17

Las declaraciones de caso caen automáticamente si no especificas lo contrario (escribiendo break). Para eso puedes escribir

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

// etc ...}


55
Tenga en cuenta que esto solo es cierto para casos vacíos. Los casos con cuerpo real no se caen automáticamente.
En Freund

4

El ejemplo de la instrucción switch muestra que no puede apilar s no vacíos case, sino que debe 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 El enlace msdn tiene un ejemplo apilado más abajo en la página. En cualquier caso, los casos apilados funcionan, especialmente en esta pregunta donde el propósito declarado es no escribir código duplicado como se hizo en su caso 1 y 2.
Gary.

Respuesta útil como ejemplo de "goto case".
Stef Geysels

Odio ir a declaraciones ¿Qué es este 1992?
Moisés
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.