0

今日、誰かが私に次のifステートメントを切り替える方法を尋ねました。

int i=5;
if(i>10)
{
   Do Something;
}
else
{
    Do Something else;
}

そして私は、iが正の値のみの整数であると仮定することを提案しました。

int i=5;
switch(i)
{
    case 1:
    case 2:
    case 3:
    case 4:
    case 5:
    case 6:
    case 7:
    case 8:
    case 9:
    case 10: Do Something else;
    break;
    case default: Do Something;
    break;
}

他にもっとエレガントな方法はありますか?

4

2 に答える 2

1

最初に、2 つのコード例 (最初に記述されたもの) が同等ではないことに注意してください。

  • あなたはあなたの例ではDo[ing] Something Elseいつではありません。i==10switch
  • しかし、元のコードは(ではなく)ifチェックしていました。i>10i>=10
  • そのため、 に分類される のcase 10:リストに明示的に含める必要があります。caseDo Something Else

あなたの質問に答えるために、いくつかの言語 (たとえば、パスカル、客観的な C だと思いますか?) では、これに似た範囲が許可されていると思います。

switch(i)
{
    case 1-10: // or is it "case 1 .. 10" ?
        Do Something else;
        break;
    case default: 
        Do Something;
        break;
}

ただし、これはC# ではサポートされていません。ケース ラベルの「スタッキング」に関するコード ディスカッションの最後のポイントを参照してくださいMSDN スイッチ(C#)

于 2013-03-11T06:23:08.310 に答える
1

C# でこれを行う直接的な方法はありません。次の方法を試すことができます。

int range = (number - 1) / 10;

switch(range)
{
  case 0: 
       Console.WriteLine("1 to 10");
       break;
  case 1:
       Console.WriteLine("11 to 20");
       break;
 //.,......
  default:
       break;
}

IMO、上記のアプローチはコードの可読性を低下させる可能性がif-elseあるため、範囲チェックに使用する方が適切です。また、上記は範囲が一定の場合にのみ機能します。

于 2013-03-11T06:28:25.640 に答える