Как минимизировать этот переключатель? - PullRequest
0 голосов
/ 02 февраля 2019
switch(number){
case 2:
    a+=b;
    break;
case 3:
    a+=b;
    break;
case 4:
    a+=b;
    d=f;
    break;
case 5:
    d=e;
    break;
}

как минимизировать первые три случая переключения, которые работают аналогично?

Ответы [ 3 ]

0 голосов
/ 02 февраля 2019

Если вы используете C # 7, вы можете использовать Pattern Matching, даже если это избыточное убийство, как справедливо указал Джон Скит.Но в случае, если вы хотите придерживаться переключения регистра и хотите уменьшить «регистр», вы можете сделать следующее

 switch(number)
   {
    case var _ when number == 2 || number==3 || number==4:
        a+=b;
        if(number ==4)
        d=f
     break;
    case 5:
        d=e;
        break;
    }

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

case var _ when new[]{2,3,4}.Contains(number):

Или

case var _ when number >= 2 || number <= 3: // As pointed by earlier answer

Без сопоставления с шаблоном, вы также можете сделать следующее

switch(number)
{
case 2:
case 3:
case 4:
    a+=b;
    if(number ==4)
        d=f;
    break;
case 5:
    d = e;
    break;
}

Кстати, если ваша проблема с "a + b", это примерно 60 строк кодау вас всегда есть возможность сделать его функцией (и переместить ее из корпуса переключателя), чтобы повысить удобочитаемость.

switch(number)
{
case 2:
case 3:
case 4:
    MethodAbAction();
    if(number ==4)
        MethodDFAction();
    break;
case 5:
    MethodDEAction();
    break;
}

Кстати, метод с 60 строками никогда не доставляет удовольствия читать.Было бы лучше, если бы вы могли расстаться.

0 голосов
/ 02 февраля 2019
if (number != 5)
{
    a += b;
}

if (number == 4)
{
    d = f;
}
else
if (number == 5)
{
    d = e;
}
0 голосов
/ 02 февраля 2019
if (2 <= number && number <= 4) {
  a += b;
}
if (number == 4) {
  d = f;
} else if (number == 5) {
  d = e;
}
...