Как добавить «или» в операторы switch?


130

Вот что я хочу сделать:

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

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

Я пробовал с "case: 2 || 5", но это не сработало.

Цель состоит в том, чтобы не писать один и тот же код для разных значений.


Что значит «не сработало»? Выдает ли это синтаксические ошибки или логические ошибки?
Zack

Ответы:


325

Сложив каждый корпус переключателя, вы достигнете условия ИЛИ.

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

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

6
Джоэл, он не поддерживает провал, но он поддерживает стек (например, пустой case 2 в этом ответе выполняет раздел case 5).
paxdiablo

Это было именно то, что я искал. Хорошая работа, вашу работу ценят.
Крис



17

Операторы case автоматически пропадают, если вы не укажете иное (написав break). Поэтому вы можете написать

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

// и т.д... }


5
Обратите внимание, что это верно только для пустых случаев. Ящики с реальным телом автоматически не проваливаются.
Фройнд,

4

Пример для оператора switch показывает, что вы не можете складывать непустые cases, но должны использовать 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 Ссылка msdn содержит пример сгруппированного ниже по странице. В любом случае, составные кейсы работают, особенно в этом вопросе, где заявленной целью является не писать дублирующий код, как в ваших случаях 1 и 2.
Gary.Ray

Полезный ответ как пример "goto case".
Stef Geysels

Ненавижу утверждения goto, что это за 1992 год?
Моисей
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.