「または」をswitchステートメントに追加するにはどうすればよいですか?


129

これは私がやりたいことです:

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

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

「case:2 || 5」で試しましたが、うまくいきませんでした。

目的は、異なる値に対して同じコードを記述しないことです。


「うまくいかなかった」とはどういう意味ですか?構文エラー、または論理エラーが発生しますか?
ザック2013年

回答:


324

各スイッチケースを積み重ねることにより、OR条件を実現します。

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

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

6
ジョエル、フォールスルーはサポートしていませんが、スタッキングはサポートしています(たとえば、この回答の空のケース2がケース5セクションを実行します)。
paxdiablo 2009年

これはまさに私が探していたものでした。お疲れ様でした。
クリス



17

特に指定しない場合は(breakと書いて)、ケース文は自動的に通過します。そのため、あなたは書くことができます

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

//など...}


5
これは空のケースにのみ当てはまることに注意してください。実際の体のケースは自動的に抜け落ちません。
フロイント2009年

4

switchステートメントの例はcase、空でないsをスタックできないことを示していますが、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

「後藤事件」の一例としての役立つ答え。
Stef Geysels

gotoステートメントは嫌いです。この1992は何ですか。
モーセ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.