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;
}
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
Vous devez faire quelque chose comme:
case 1:
case 2:
case 3:
//do stuff
break;
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.
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é ! :)
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;
}
vous pouvez l'essayer.
Interrupteur (Valor) { boîtier (Valor1 & Valor2): pause; }
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");
}
"
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.