Подтвердить что ты не робот

С# переключатель/разрыв

Кажется, мне нужно использовать break в каждом блоке case в моей инструкции switch с помощью С#.

Я вижу причину этого на других языках, где вы можете перейти к следующему аргументу case.

Возможно ли, чтобы блоки case упали до других блоков case?

Спасибо, очень благодарен!

4b9b3361

Ответ 1

Да, вы можете перейти к следующему блоку кода двумя способами. Вы можете использовать пустые случаи, которые не нуждаются в перерыве, или вы можете использовать goto для перехода к следующему (или любому) случаю:

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

Ответ 2

Придерживание "перерыва" заключается в том, чтобы остановить ошибки. Если вам нужно заставить fall-thru использовать "goto case" (заменить его соответствующим значением)

в следующем примере показано, что вы можете сделать:

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

Ответ 3

С# не поддерживает неявное падение через конструкцию, но break (или goto), тем не менее, должен быть там (msdn). Единственное, что вы можете сделать, это стековые случаи следующим образом:

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

но break (или другой оператор перехода, такой как goto), должен быть там.

Ответ 4

В моем коде С# (.NET 1.1, CF) оба из них разрешены:

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();         
}

... но с перерывами они серые, поэтому считаются спорными. Поэтому, по крайней мере, в моем случае они разрешены, но не требуются.