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.


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

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



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


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

-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
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.