Commutateur: Plusieurs valeurs dans un cas?

J'ai le code suivant, mais quand j'entre "12" je reçois toujours "vous une personne âgée". C'est pas 9-15 les numéros 9 JUSQU'à 15? Comment puis-je gérer plusieurs valeurs avec un cas?

  int age = Convert.ToInt32(txtBoxAge.Text);

  switch (age) 

  {
    case 1 - 8:
  MessageBox.Show("You are only " + age + " years oldn You must be kidding right.nPlease fill in your *real* age.");
    break;
    case 9 - 15:
  MessageBox.Show("You are only " + age + " years oldn That's too young!");
    break;
    case 16-100:
  MessageBox.Show("You are " + age + " years oldn Perfect.");
    break;
    default:
  MessageBox.Show("You an old person.");
    break;
  }
21
demandé sur Marc Gravell 2012-10-16 13:38:44

7 réponses

1 - 8 = -7

9 - 15 = -6

16 - 100 = -84

Vous avez:

case -7:
    ...
    break;
case -6:
    ...
    break;
case -84:
    ...
    break;

Soit utiliser:

case 1:
case 2: 
case 3:

, Etc, ou (peut-être plus lisible) utilisation:

if(age >= 1 && age <= 8) {
     ...
} else if (age >= 9 && age <= 15) {
     ...
} else if (age >= 16 && age <= 100) {
     ...
} else {
     ...
}

Etc

34
répondu Marc Gravell 2012-10-16 09:40:52

Vous devez faire quelque chose comme:

case 1:
case 2:
case 3:
//do stuff
break;
31
répondu Tomtom 2012-10-16 09:40:38

Vous ne pouvez pas spécifier une plage dans l'instruction case, peut faire comme suit.

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.

6
répondu Basil Farook 2012-10-16 09:49:30

Vous pouvez utiliser ifelse à la place.mais si vous voulez savoir comment utiliser le commutateur dans ce cas.ici est un exemple.

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

Espérons que cela aide ! :)

4
répondu Sahi Sahith 2015-07-13 07:21:05

En C# 7 il est possible d'utiliser un lorsque la clause dans une instruction case.

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;
}
1
répondu bkstill 2018-04-10 15:36:36

Vous pouvez essayer ceci.

switch (Valor)
            {
                case (Valor1 & Valor2):

                    break;               
            }
0
répondu Francisco 2016-08-03 16:41:23

Il N'y a aucun moyen d'évaluer plusieurs valeurs dans un "cas". Vous pouvez soit utiliser une instruction if (comme d'autres l'ont suggéré) ou appeler une méthode qui évalue la gamme que l'entier appartient et retourne une valeur qui représente la gamme (comme "mineur", "adulte", etc.), puis évaluez cette valeur renvoyée dans l'instruction switch. Bien sûr, vous utiliseriez probablement toujours une instruction if dans la méthode personnalisée.

0
répondu Carl Fredrickson 2016-12-16 21:27:40