问题
I have the following piece of code, but yet when I enter "12" I still get "You an old person". Isn't 9 - 15 the numbers 9 UNTIL 15? How else do I handle multiple values with one case?
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:
1 - 8 = -7
9 - 15 = -6
16 - 100 = -84
You have:
case -7:
...
break;
case -6:
...
break;
case -84:
...
break;
Either use:
case 1:
case 2:
case 3:
etc, or (perhaps more readable) use:
if(age >= 1 && age <= 8) {
...
} else if (age >= 9 && age <= 15) {
...
} else if (age >= 16 && age <= 100) {
...
} else {
...
}
etc
回答2:
You have to do something like:
case 1:
case 2:
case 3:
//do stuff
break;
回答3:
You can't specify a range in the case statement, can do as follows.
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;
...........etc.
回答4:
In C# 7 it's possible to use a when clause in a case statement.
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;
}
回答5:
You can use ifelse instead.but if you want to know how to use switch in this case.here is an example.
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;
}
hope that helps ! :)
回答6:
you can try this.
switch (Valor) { case (Valor1 & Valor2): break; }
回答7:
There's no way to evaluate multiple values in one 'case'. You could either use an if statement (as others have suggested) or call a method which evaluates the range that the integer belongs to and returns a value which represents that range (such as "minor", "adult", etc.), then evaluate this returned value in the switch statement. Of course, you'd probably still be using an if statement in the custom method.
回答8:
Separate the business rules for age from the actions e.g. (NB just typed, not checked)
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");
}
`
回答9:
What about this?
switch (true)
{
case (age >= 1 && age <= 8):
MessageBox.Show("You are only " + age + " years old\n You must be kidding right.\nPlease fill in your *real* age.");
break;
case (age >= 9 && age <= 15):
MessageBox.Show("You are only " + age + " years old\n That's too young!");
break;
case (age >= 16 && age <= 100):
MessageBox.Show("You are " + age + " years old\n Perfect.");
break;
default:
MessageBox.Show("You an old person.");
break;
}
Cheers
来源:https://stackoverflow.com/questions/12911691/switch-multiple-values-in-one-case