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

vlo*_*ack 25 c# case switch-statement

我有以下代码,但是当我输入"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;
  }
Run Code Online (Sandbox Code Playgroud)

Mar*_*ell 38

1 - 8 = -7

9 - 15 = -6

16 - 100 = -84

你有:

case -7:
    ...
    break;
case -6:
    ...
    break;
case -84:
    ...
    break;
Run Code Online (Sandbox Code Playgroud)

无论是使用方法:

case 1:
case 2: 
case 3:
Run Code Online (Sandbox Code Playgroud)

等,(可能更具可读性)使用:

if(age >= 1 && age <= 8) {
     ...
} else if (age >= 9 && age <= 15) {
     ...
} else if (age >= 16 && age <= 100) {
     ...
} else {
     ...
}
Run Code Online (Sandbox Code Playgroud)

等等

  • 更可读的是计算每个年龄段的方法:) (3认同)

Tom*_*tom 32

你必须这样做:

case 1:
case 2:
case 3:
//do stuff
break;
Run Code Online (Sandbox Code Playgroud)


小智 6

您无法在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;
Run Code Online (Sandbox Code Playgroud)

...........等等.

  • 这是我多年来在本网站上发布的最糟糕的代码部分.有一点,如果解决方案是坏代码,你甚至不会给作者他们真正想要的东西,因为它很糟糕. (30认同)

bks*_*ill 6

在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;
}
Run Code Online (Sandbox Code Playgroud)

  • 自从 C#7 发布以来,这已经成为正确的答案。 (2认同)

Sah*_*ith 5

您可以改用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;
}
Run Code Online (Sandbox Code Playgroud)

希望能有所帮助!:)