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;
}
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
Vous devez faire quelque chose comme:
case 1:
case 2:
case 3:
//do stuff
break;
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.
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 ! :)
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;
}
Vous pouvez essayer ceci.
switch (Valor) { case (Valor1 & Valor2): break; }
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.