/ / c#switch文質問 - C#、switch-statement、magic-numbers

C#switch文質問 - C#、switch文、magic-numbers

私は簡単なスイッチについて2つの質問がありますが、私はそれらを理解できません。

最初:

C#switch文では、case文は連続していなければなりませんか?

例えば:

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文で使用する定数を宣言する方が良いでしょうか?

ありがとう!

編集:

あなたのお返事ありがとうございました!それは有り難いです。

回答:

回答№1は0

case文の値は必ずしも連続している必要はありません。

整数値のみを使用することもできません。文字列も同様に機能します。

あなたが魔法の数字を心配しているなら、あなたの最良の賭けは列挙を作ることです、それはそれらの魔法の数字の意味を伝えるでしょう。


回答№2の場合は1

彼らはあなたが望むどんな順序でもかまいません。実際の数字を使うのは必ずしも悪いことではありませんが、魔法の数字ではありません。 int、おそらく

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

(もちろん、これは一例に過ぎず、このコードを現実世界で見ることはできません)


回答№3の場合は0

彼らは連続している必要はありませんが、私はそれを分かりやすくするためです。


回答№4の場合は0

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

私は数値に意味を与えるために列挙型またはconst intのいずれかを使用することを好みます。特に、道路沿いの他の誰かによって維持されている場合は特にそうです。


回答№5の場合は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であるなど、わかりやすい数字の例外を作成します。


答え№6の場合は0

小さな最適化として、ケースを注文することができます実際の/期待される頻度に基づく値。また、 "デフォルト"のケースを追加することで、enumをどこで使用したのかを忘れてしまうことを簡単に発見できるようになります。