Заявление о переключении в С#

Кто-нибудь знает, можно ли включить диапазон в оператор switch (и если да, как)?

Например:

switch (x)
{
   case 1:
     //do something
     break;
   case 2..8:
     //do something else
     break;
   default:
     break;
}

Компилятор, похоже, не любит такой синтаксис - и ему не нравится:

case <= 8:

Ответы

Ответ 1

Нет, это невозможно. Есть несколько способов, которые я сделал в прошлом:

Исправлено кодирование:

switch (x)
{
   case 1:
     //do something
     break;
   case 2:
   case 3:
   case 4:
   case 5:
   case 6:
   case 7:
   case 8:
     //do something else
     break;
   default:
     break;
}

В сочетании с выражением if {}:

switch (x)
{
   case 1:
     //do something
     break;
   default:
     if (x <= 8)
     {
        // do something
     }
     else
     {
       // throw exception
     }
     break;
}

Ответ 2

Нет, но вы можете написать это, так что вы, по крайней мере, не будете писать часть // do something else несколько раз.

switch (x)
{
   case 1:
     //do something
     break;
   case 2: case 3: case 4: case 5: case 6: case 7: case 8:
     //do something else
     break;
   default:
     break;
}

Ответ 3

Короткий ответ: нет. Можно было бы написать все случаи, но такая нотация диапазона не поддерживается.

Я думаю, вам нужно использовать инструкцию if здесь или переключиться на язык, где есть более эффективная поддержка распознавания случая.

Ответ 4

Если у вас так мало случаев, if будет очень предпочтительным.

Ответ 5

Одна из возможностей - преобразовать диапазоны в целые числа. Например:

//assuming x>=9 or if (x <= 0) return;
        switch((x+12)/7)
        {   case 1:Console.WriteLine("one");
                break;
            case 2:Console.WriteLine("2 through 8 inclusive");
                break;
            case 3:Console.WriteLine("9 through 15 inclusive");
                break;
            default: Console.WriteLine("16 or more");
                break;
        }

Ответ 6

Вы можете обрабатывать явные случаи в каждом случае, и если у вас есть только один диапазон, справляйтесь с ним в случае по умолчанию.

Ответ 7

вы можете сделать

case 2:
case 3:
case 4:
...
case 8:
 // code here
 break

Ответ 8

Вы можете использовать case fall через:

switch (x)
{
   case 1:
     //do something
     break;
   case 2:
   case 3:
   case 4:
   case 5:
   case 6:
   case 7:
   case 8:
     //do something else
     break;
   default:
     break;
}

Но я бы просто использовал, если для этого.

Ответ 9

Вы не можете использовать условные операторы в случае коммутатора.

Если вы хотите выполнить одни и те же строки кода для разных параметров, вы можете сделать одно:

switch (i)
            {
                case 0:
                case 1:
                case 2: 
                case 3:
                    //do something here.
                    break;
                default:
                    //do something here.
                    break;
            }