Wie füge ich "oder" in switch-Anweisungen hinzu?

129

Folgendes möchte ich tun:

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

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

Ich habe es mit "case: 2 || 5" versucht, aber es hat nicht funktioniert.

Der Zweck besteht darin, nicht denselben Code für unterschiedliche Werte zu schreiben.

Ivan Prodanov
quelle
Was meinst du mit "es hat nicht funktioniert"? Gibt es Syntaxfehler oder logische Fehler?
Zack

Antworten:

324

Durch Stapeln jedes Schaltergehäuses erreichen Sie die ODER-Bedingung.

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

    case 7:
    case 12:
    ...
    break;
    ...
}
Jose Basilio
quelle
6
Joel, es unterstützt kein Durchfallen, aber es unterstützt das Stapeln (z. B. führt ein leerer Fall 2 in dieser Antwort den Abschnitt 5 aus).
Paxdiablo
Genau das habe ich gesucht. Gute Arbeit, Ihre Arbeit wird geschätzt.
Chris
36

Sie tun dies, indem Sie Falletiketten stapeln :

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

    case 7: 
    case 12:
    ...
    break;
    ...
}
Dave Webb
quelle
19
case 2:
case 5:
do something
break;
Auf Freund
quelle
17

Fallanweisungen fallen automatisch durch, wenn Sie nichts anderes angeben (durch Schreiben einer Pause). Dafür kannst du schreiben

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

// etc... }

AnnaR
quelle
5
Beachten Sie, dass dies nur für leere Fälle gilt. Fälle mit tatsächlichem Körper fallen nicht automatisch durch.
Am Freund
4

Das Beispiel für die switch-Anweisung zeigt, dass Sie nicht leere cases nicht stapeln können , sondern gotos verwenden sollten:

// 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
quelle
-1 Der msdn-Link enthält ein gestapeltes Beispiel weiter unten auf der Seite. In jedem Fall funktionieren gestapelte Fälle, insbesondere in dieser Frage, in der der angegebene Zweck darin besteht, keinen doppelten Code zu schreiben, wie dies in Fall 1 und 2 der Fall ist.
Gary.Ray
Nützliche Antwort als Beispiel für "goto case".
Stef Geysels
Ich hasse goto Aussagen, was ist das 1992?
Moses