web-dev-qa-db-fra.com

Switch: plusieurs valeurs dans un cas?

J'ai le code suivant, mais quand je saisis "12", je reçois toujours "You an old person". 9 - 15 n'est-il pas 9 jusqu'à 15? Sinon, comment gérer plusieurs valeurs avec un seul cas?

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

1 - 8 = -7

9 - 15 = -6

16 - 100 = -84

Tu as:

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

Soit utilisez:

case 1:
case 2: 
case 3:

etc, o (peut-être plus lisible) utilisez:

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

etc

37
Marc Gravell

Vous devez faire quelque chose comme:

case 1:
case 2:
case 3:
//do stuff
break;
32
Tomtom

Vous ne pouvez pas spécifier de plage dans l'instruction case, vous pouvez procéder 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
Basil Farook

Vous pouvez utiliser ifelse à la place, mais si vous voulez savoir comment utiliser switch dans ce cas, voici 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;
}

j'espère que ça t'as aidé ! :)

5
Sahi Sahith

En C # 7, il est possible d'utiliser une clause when 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;
}
4
bkstill

vous pouvez l'essayer.

Interrupteur 
 (Valor) 
 {
 boîtier (Valor1 & Valor2): 
 
 pause; 
} 
0
Francisco

Séparez les règles commerciales pour l'âge des actions, par ex. (NB vient de taper, pas vérifié)

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

"

0
brewmanz

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é), soit appeler une méthode qui évalue la plage à laquelle l'entier appartient et renvoie une valeur qui représente cette plage (telle que "mineur", "adulte", etc.), puis évaluer cette valeur retournée dans l'instruction switch. Bien sûr, vous utiliserez probablement toujours une instruction if dans la méthode personnalisée.

0
Carl Fredrickson