Comment ajouter "ou" dans les instructions switch?

129

Voici ce que je veux faire:

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

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

J'ai essayé avec "case: 2 || 5", mais cela n'a pas fonctionné.

Le but est de ne pas écrire le même code pour des valeurs différentes.

Ivan Prodanov
la source
Que voulez-vous dire "ça n'a pas marché"? Cela vous donne-t-il des erreurs de syntaxe ou des erreurs logiques?
Zack

Réponses:

324

En empilant chaque boîtier de commutateur, vous obtenez la condition OR.

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

    case 7:
    case 12:
    ...
    break;
    ...
}
José Basilio
la source
6
Joel, il ne supporte pas la chute mais il prend en charge l'empilement (par exemple, un cas vide 2 dans cette réponse exécute la section case 5).
paxdiablo
C'était exactement ce que je cherchais. Bon travail, votre travail est apprécié.
Chris
19
case 2:
case 5:
do something
break;
Sur Freund
la source
17

Les instructions de cas échouent automatiquement si vous ne spécifiez pas le contraire (en écrivant break). Pour cela, vous pouvez écrire

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

// etc... }

AnnaR
la source
5
Notez que cela n'est vrai que pour les cas vides. Les cas avec un corps réel ne tombent pas automatiquement.
Le Freund
4

L'exemple de l' instruction switch montre que vous ne pouvez pas empiler des cases non vides , mais que vous devez utiliser 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.");
   }
}
gimel
la source
-1 Le lien msdn a un exemple empilé plus bas dans la page. Quoi qu'il en soit, les cas empilés fonctionnent, en particulier dans cette question où le but déclaré est de ne pas écrire de code en double comme dans votre cas 1 et 2.
Gary.Ray
Réponse utile comme exemple de "goto case".
Stef Geysels
Je déteste les déclarations goto. Qu'est-ce que ce 1992?
Moïse le