Оператор переключения в C#

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

Например:

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

Компилятору, кажется, не нравится этот вид синтаксиса - и при этом ему не нравится:

case <= 8:
15
задан Paul Michaels 31 March 2010 в 11:37
поделиться

8 ответов

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

Фиксированная кодировка:

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;
}
25
ответ дан 1 December 2019 в 01:10
поделиться

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

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 для этого.

-1
ответ дан 1 December 2019 в 01:10
поделиться

Нет, но вы можете написать это, так что вы, по крайней мере, избегаете написания части // сделайте что-то еще несколько раз.

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;
}
6
ответ дан 1 December 2019 в 01:10
поделиться

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

case 2:
case 3:
case 4:
...
case 8:
 // code here
 break
-1
ответ дан 1 December 2019 в 01:10
поделиться

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

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

switch (i)
            {
                case 0:
                case 1:
                case 2: 
                case 3:
                    //do something here.
                    break;
                default:
                    //do something here.
                    break;
            }
-1
ответ дан 1 December 2019 в 01:10
поделиться

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

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

3
ответ дан 1 December 2019 в 01:10
поделиться

Wenn Sie so wenige Fälle haben, wäre if viel lieber.

2
ответ дан 1 December 2019 в 01:10
поделиться

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

1
ответ дан 1 December 2019 в 01:10
поделиться
Другие вопросы по тегам:

Похожие вопросы: