Як додати "або" в оператори переключення?


129

Це те, що я хочу зробити:

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

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

Я спробував з "case: 2 || 5", але це не вийшло.

Мета - не писати один і той же код для різних значень.


Що ви маєте на увазі "це не спрацювало"? Це дає вам синтаксичні помилки чи логічні помилки?
Зак

Відповіді:


324

Шляхом складання кожного корпусу комутатора ви досягаєте умови АБО.

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

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

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

Це саме те, що я шукав. Гарна робота, ваша робота оцінена.
Кріс



17

Виписки з справ автоматично пропадають, якщо ви не вказуєте інше (шляхом перерви в письмовій формі). Для цього можна написати

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

// тощо ...}


5
Зауважте, що це справедливо лише для порожніх випадків. Справи з фактичним тілом не пропадають автоматично.
Фрейнд

4

Приклад для оператора переключення показує, що ви не можете укладати не порожні 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".
Стеф Гейзельс

Я ненавиджу заяви Goto, що це за 1992 рік?
Мойсей
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.