Заявление о переключении в С#
Кто-нибудь знает, можно ли включить диапазон в оператор 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;
}