0

本題に入ります。スイッチについて簡単な質問が 2 つありますが、わかりません。

初め:

c# switch ステートメントでは、case ステートメントは (int で) 連続している必要がありますか?

例えば:

switch(someInt)
{
    case 1
    // some code
    case 2
    // some code 
    case 3 
    // some code
}

または、次のようなことを行うことは可能ですか:

switch(someInt)
{
    case 1 
    case 3
    case 5
}

通常、if-elseステートメントはそのようなことに使用されることは知っていますが、それが可能かどうか知りたいだけです.

また、case ステートメントで実際の数値を使用することはマジック ナンバーと見なされますか? または、case ステートメントで使用する定数を宣言することをお勧めしますか?

ありがとう!

編集:

皆様、ご回答ありがとうございます!それは有り難いです。

4

6 に答える 6

1

それらは任意の順序にすることができます。いいえ、実際の数値を使用することが常に悪いわけではありません。しかし、魔法の数ではありません。を比較する場合は数字を使用してくださいint

switch (numberOfItems) 
{  
    case 0:
      break;
    case 1:
      break;
    default:
      break;
}  

(もちろん、これは単なる例であり、このコードを実際に目にすることは想像できません)

于 2009-11-25T03:58:32.410 に答える
0

順序は関係ありません。コンパイラがその作業を行います。

私は、列挙型またはconst intのいずれかを使用して、数値に意味を与えることを好みます。特に、将来的に他の誰かによって保守されている場合はそうです。

于 2009-11-25T03:58:35.623 に答える
0

caseステートメントの値は、連続している必要はありません。

また、整数値のみを使用することに縛られているわけではありません。文字列も同様に機能します。

マジックナンバーが心配な場合は、列挙型を作成するのが最善の策です。それはそれらのマジックナンバーの意味を伝えます。それ以外の場合は、それを持って楽しんでください。

于 2009-11-25T03:59:00.867 に答える
0

両方を行うことが可能です。構文は次のとおりです:(あなたは近くにいます)

switch(someInt)
{
    case 1:
    // some code
    break;

    case 2:
    // some code 
    break;

    case 3:
    // some code
    break;

    default:
    // code for "else" case
    break;
}
or is it possible to do something like the following:

switch(someInt)
{
    case 1:
    case 3:
    case 5:
    // some code
    break;
} 

コロンとbreaksに注意してください。

マジックナンバーの使用に関しては、一般的に、リテラルを定数に入れることを好みますが、因子の除算性をチェックするための最小数が2であるなど、明白な数は例外とします。

于 2009-11-25T03:59:30.240 に答える
0

小さな最適化として、実際の/予想される頻度に基づいてケース値を並べ替えることができます。また、「デフォルト」のケースを追加して、列挙型を使用した場所とその説明を忘れた場所を簡単に見つけられるようにします。これは、定数に対して列挙値を使用するもう1つの理由です。

于 2009-11-25T04:03:22.353 に答える
0

それらは連続している必要はありません。わかりやすくするためにそうしていますが。

于 2009-11-25T03:57:32.960 に答える