Кто-либо знает, возможно ли включать диапазон в оператор переключения (и если так, как)?
Например:
switch (x)
{
case 1:
//do something
break;
case 2..8:
//do something else
break;
default:
break;
}
Компилятору, кажется, не нравится этот вид синтаксиса - и при этом ему не нравится:
case <= 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;
}
Вы можете использовать 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 для этого.
Нет, но вы можете написать это, так что вы, по крайней мере, избегаете написания части // сделайте что-то еще
несколько раз.
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;
}
вы можете сделать
case 2:
case 3:
case 4:
...
case 8:
// code here
break
Вы не можете использовать какие-либо условные операторы в случае switch.
Если вы хотите выполнить одни и те же строки кода для разных вариантов, то вы можете сделать следующее:
switch (i)
{
case 0:
case 1:
case 2:
case 3:
//do something here.
break;
default:
//do something here.
break;
}
Короткий ответ: нет. Можно было бы написать там все случаи, но такая нотация диапазона не поддерживается.
Я думаю, что здесь нужно использовать оператор if
или перейти на язык, где лучше поддерживается дескрипция регистров.
Вы можете обрабатывать явные случаи от случая к случаю, а если у вас только один диапазон, работать с ним в случае по умолчанию.