C# 开关:一种情况下有多个值?

C# 开关:一种情况下有多个值?,c#,switch-statement,case,C#,Switch Statement,Case,我有下面的代码,但当我输入“12”时,我仍然得到“你是一个老人”。9-15不是数字9到15吗?除此之外,我如何在一个案例中处理多个值 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 y

我有下面的代码,但当我输入“12”时,我仍然得到“你是一个老人”。9-15不是数字9到15吗?除此之外,我如何在一个案例中处理多个值

  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;
  }

您必须执行以下操作:

case 1:
case 2:
case 3:
//do stuff
break;
1-8=-7

9-15=-6

16-100=-84

你有:

case -7:
    ...
    break;
case -6:
    ...
    break;
case -84:
    ...
    break;
或使用:

等等,或者(可能更可读)使用:


如果(age>=1&&age=9&&age=16&&age您不能在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来代替。但如果您想知道在这种情况下如何使用switch,请看一个示例

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;
}
int-age=Convert.ToInt32(txtBoxAge.Text)`
int标志;
如果(年龄>=1&&age=9&&age=16&&age,您可以尝试此方法

switch (Valor) { case (Valor1 & Valor2): break; } 开关(Valor) { 案例(Valor1和Valor2): 打破 }
无法在一个“case”中计算多个值。您可以使用if语句(如其他人所建议的)或调用一个方法来计算整数所属的范围,并返回表示该范围的值(如“minor”、“成人”等),然后在switch语句中计算该返回值。当然,您可能仍然在自定义方法中使用if语句。

在C#7中,可以使用if语句

int-age=12;
开关(年龄)
{

case int i当i>=1&&i=9&&i=16&&i时,将年龄的业务规则与操作分开,例如(注意:仅键入,未选中)

enum ange{eChild,eYouth,eAdult,eAncient};
热切的渴望;
如果(年龄这个怎么办

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;
}
开关(真)
{

case(age>=1&&age=9&&age=16&&age这对于
开关
语句来说似乎不是一个很好的例子。如果
语句是一系列
的话,它会更有意义。开关不接受case的范围值:“case 1-8:”被解释为“case-7:”但在您的情况下,我认为If构造会更好。谢谢,我现在这样做了,但我得到一个FormatException在年龄声明中未处理:/更可读的将是计算每个年龄段的方法:)这是多年来我在这个网站上看到的最糟糕的代码部分。如果解决方案是糟糕的代码,你甚至不会给作者他们真正想要的东西,因为它是糟糕的。至少可以展示如何在一个结果中将命名的
案例
默认案例
结合起来,而不是定义了单独的默认值或仅定义了默认值。如
case“case_default”:默认值:return x;break;
自从C#7发布以来,这已成为正确答案。 switch (Valor) { case (Valor1 & Valor2): break; }
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;
}
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");
}   
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;
}