次のコードがありますが、「12」と入力しても「あなたは老人」と表示されます。 9-15は15までの数字ではありませんか? 1つのケースで複数の値を処理するにはどうすればよいですか?
int age = Convert.ToInt32(txtBoxAge.Text);
switch (age)
{
case 1 - 8:
MessageBox.Show("You are only " + age + " years old\n You must be kidding right.\nPlease fill in your *real* age.");
break;
case 9 - 15:
MessageBox.Show("You are only " + age + " years old\n That's too young!");
break;
case 16-100:
MessageBox.Show("You are " + age + " years old\n Perfect.");
break;
default:
MessageBox.Show("You an old person.");
break;
}
1-8 = -7
9-15 = -6
16-100 = -84
あなたが持っている:
case -7:
...
break;
case -6:
...
break;
case -84:
...
break;
いずれか使用:
case 1:
case 2:
case 3:
など、または(おそらく読みやすい)使用:
if(age >= 1 && age <= 8) {
...
} else if (age >= 9 && age <= 15) {
...
} else if (age >= 16 && age <= 100) {
...
} else {
...
}
等
あなたは次のようなことをしなければなりません:
case 1:
case 2:
case 3:
//do stuff
break;
Caseステートメントで範囲を指定することはできません。次のようにできます。
case 1:
case 2:
case 3:
case 4:
case 5:
case 6:
case 7:
case 8:
MessageBox.Show("You are only " + age + " years old\n You must be kidding right.\nPlease fill in your *real* age.");
break;
case 9:
case 10:
case 11:
case 12:
case 13:
case 14:
case 15:
MessageBox.Show("You are only " + age + " years old\n That's too young!");
break;
...........等。
代わりにifelseを使用できますが、この場合のスイッチの使用方法を知りたい場合は、ここに例を示します。
int age = Convert.ToInt32(txtBoxAge.Text);`
int flag;
if(age >= 1 && age <= 8) {
flag = 1;
} else if (age >= 9 && age <= 15) {
flag = 2;
} else if (age >= 16 && age <= 100) {
flag = 3;
} else {
flag = 4;
}
switch (flag)
{
case 1:
MessageBox.Show("You are only " + age + " years old\n You must be kidding right.\nPlease fill in your *real* age.");
break;
case 2:
MessageBox.Show("You are only " + age + " years old\n That's too young!");
break;
case 3:
MessageBox.Show("You are " + age + " years old\n Perfect.");
break;
default:
MessageBox.Show("You an old person.");
break;
}
それが役立つことを願っています! :)
C#7では、 caseステートメントのwhen句 を使用できます。
int age = 12;
switch (age)
{
case int i when i >=1 && i <= 8:
System.Console.WriteLine("You are only " + age + " years old. You must be kidding right. Please fill in your *real* age.");
break;
case int i when i >=9 && i <= 15:
System.Console.WriteLine("You are only " + age + " years old. That's too young!");
break;
case int i when i >=16 && i <= 100:
System.Console.WriteLine("You are " + age + " years old. Perfect.");
break;
default:
System.Console.WriteLine("You an old person.");
break;
}
これを試すことができます。
switch(Valor) { case(Valor1&Valor2): break; }
年齢のビジネスルールとアクションを分離します。 (NB入力したばかりで、チェックされていません)
enum eAgerange { eChild, eYouth, eAdult, eAncient};
eAgeRange ar;
if(age <= 8) ar = eChild;
else if(age <= 15) ar = eYouth;
else if(age <= 100) ar = eAdult;
else ar = eAncient;
switch(ar)
{
case eChild:
// action
case eYouth:
// action
case eAdult:
// action
case eAncient:
// action
default: throw new NotImplementedException($"Oops {ar.ToString()} not handled");
}
`
1つの「ケース」で複数の値を評価する方法はありません。 ifステートメントを使用するか(他の人が示唆しているように)、整数が属する範囲を評価し、その範囲を表す値(「マイナー」、「アダルト」など)を返すメソッドを呼び出してから、 switchステートメントでこの戻り値を評価します。もちろん、おそらくカスタムメソッドでifステートメントを使用しているでしょう。