Подтвердить что ты не робот

Переключатель: несколько значений в одном случае?

У меня есть следующий фрагмент кода, но когда я вхожу в "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 too young!");
    break;
    case 16-100:
  MessageBox.Show("You are " + age + " years old\n Perfect.");
    break;
    default:
  MessageBox.Show("You an old person.");
    break;
  }
4b9b3361

Ответ 1

1 - 8 = -7

9 - 15 = -6

16 - 100 = -84

У вас есть:

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

Либо используйте:

case 1:
case 2: 
case 3:

и т.д., или (возможно, более читаемый):

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

и т.д.

Ответ 2

Вам нужно сделать что-то вроде:

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

Ответ 3

Вы не можете указать диапазон в выражении 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 too young!");
   break;

........... и т.д..

Ответ 4

Вместо этого вы можете использовать ifelse. Но если вы хотите знать, как использовать переключатель в этом случае. Вот пример.

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 too young!");
break;
case 3:
  MessageBox.Show("You are " + age + " years old\n Perfect.");
break;
default:
  MessageBox.Show("You an old person.");
break;
}

надеюсь, что это поможет!:)

Ответ 5

В С# 7 можно использовать предложение when в операторе 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 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;
}

Ответ 6

вы можете попробовать это.

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

                    break;               
            }

Ответ 7

Нет способа оценить несколько значений в одном "случае". Вы можете либо использовать оператор if (как предложили другие), либо вызвать метод, который оценивает диапазон, к которому принадлежит целое число, и возвращает значение, которое представляет этот диапазон (например, "младший", "взрослый" и т.д.), Затем оцените это возвращаемое значение в инструкции switch. Конечно, вы, вероятно, все еще будете использовать инструкцию if в пользовательском методе.

Ответ 8

Отделите бизнес-правила для возраста от действий, например (примечание только что напечатано, а не проверено)

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

'