Pregunta

Parece que necesito un descanso en cada caso en mi bloque de instrucción switch usando C #.

puedo ver la razón de esto en otros idiomas donde se puede caer a través de la siguiente declaración de caso.

Es posible que los bloques de casos caigan a través de otros bloques de caso?

Muchas gracias, muy apreciada!

¿Fue útil?

Solución

Sí, se puede caer hasta el siguiente bloque caso de dos maneras. Puede utilizar cajas vacías, que no necesitan un descanso, o puede utilizar goto para saltar a la siguiente (o cualquier) caso:

switch (n) {
  case 1:
  case 2:
  case 3:
    Console.WriteLine("1, 2 or 3");
    goto case 4;
  case 4:
    Console.WriteLine(4);
    break;
}

Otros consejos

La aplicación de la "ruptura" está ahí para insectos de parada. Si necesita forzar una caída Seguido a continuación, utilizar el "caso Goto" (con sustituir el valor apropiado)

El siguiente ejemplo muestra lo que puede hacer:

switch(n)
{
    case 1:
    case 2:
      //do something for 1+2
      //...
      goto case 3;
    case 3:
      //do something for 3, and also extra for 1+2
      //...
      break;
    default:
      //do something for all other values
      //...
      break;
}

http://msdn.microsoft.com /en-us/library/06tc147t%28VS.80%29.aspx

C # no apoyar caída implícita a través de constructo, pero el break (o goto), no obstante, tiene que estar allí ( MSDN ). La única cosa que puede hacer es pila casos de la siguiente manera:

switch(something) {
    case 1:
    case 2:
      //do something
      break;
    case 3:
      //do something else
}

pero que break (u otra instrucción de salto como goto) sólo tiene que estar allí.

En mi C # (.NET 1.1, CF) de código, ambos están permitidos:

switch (_printerChoice) 
{
    case BeltPrintersEnum.ZebraQL220: 
        return new ZebraQL220Printer();
        break;
    case BeltPrintersEnum.ONeal: 
        return new ONealPrinter();
        break;
    default:            
        return new ZebraQL220Printer();         
                        break;  
}

switch (_printerChoice) 
{
    case BeltPrintersEnum.ZebraQL220: 
        return new ZebraQL220Printer();
    case BeltPrintersEnum.ONeal: 
        return new ONealPrinter();
    default:            
        return new ZebraQL220Printer();         
}

... pero con las roturas en, que están en gris, por lo que considera discutible. Por lo tanto, al menos en mi caso, se les permite, pero no es necesario.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top