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.


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;
    ...
}

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



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... }


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.");
   }
}

-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
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.