Оператор switch внутри оператора switch (С#)?
Мне нужно оценить многие условия. В моем случае я должен сделать что-то вроде этого:
switch(id)
{
case 5:
// switch some other cases here
case 6:
// set some value
...
}
Хорошо ли иметь другой переключатель в случае 5? Если нет, то что лучше? Есть ли там?
Спасибо: -)
Ответы
Ответ 1
Я бы назвал функцию, которая была специфичной для случая 5, а затем имеет случай переключения в этой функции. Например:
switch(id)
{
case 5:
functionFiveSpecific(id);
case 6:
// set some value
...
}
Функция, специфичная для случая 5:
private void functionFiveSpecific(id)
{
// other switch in here
}
Хотя
Настоятельно рекомендуется избегать использования операторов switch, если это возможно. Здесь читайте .
Ответ 2
Единственное, что может быть неправильным в том, что это может ухудшить читаемость:
switch(id)
{
case 5:
{
switch (somethingElse)
{
case 1:
// blah...
}
}
case 6:
// set some value
...
}
Вы можете улучшить это, перемещая вложенный раздел в метод:
switch(id)
{
case 5:
Foo();
break;
case 6:
// set some value
...
}
Ответ 3
Избегайте!
Попробуйте реорганизовать свой код, чтобы исключить случаи переключения. Операторы switch для поведения могут быть реорганизованы в шаблон стратегии.

Ответ 4
Операторы Switch не являются плохой практикой. Вложенные операторы switch могут быть беспорядочными, чтобы посмотреть.
Возможно, подумайте о внедрении вложенного оператора switch в другой метод, чтобы улучшить ясность.
Ответ 5
Лучшая практика заключается в том, чтобы инкапсулировать различное поведение полиморфно внутри разных классов и стараться избегать операторов switch, если это возможно.
Это не всегда возможно, и если вы должны использовать операторы switch, я бы не добавил другой вложенный оператор switch (или набор операторов if), но, вероятно, имел бы вызов метода, который бы содержал эту логику.
Если вы разместите более подробную информацию о том, что вы пытаетесь сделать, мы можем предложить лучшие предложения.
Ответ 6
Как только вы начнете встраивать Цикломатическая сложность начнет расти. В зависимости от того, насколько сложны ваши вложенные коммутаторы, это может быть интересно поддерживать. Возможно, вам стоит подумать о том, чтобы переместить второй вложенный коммутатор в свою собственную функцию. Например
switch (order.Status)
{
case OrderStatus.New:
// Do something to a new order;
break;
...
case OrderStatus.ReadyToShip
// Process Shipping Instructions
ShipOrder(order);
break;
}
а затем, если у вас есть переключатель в зависимости от типа доставки, оплаченного за
void ShipOrder(Order order)
{
switch (order.ShippingMethod)
{
}
}
Перемещение второго оператора switch из первого упрощает его обслуживание, а также может быть протестировано изолированно
Ответ 7
Используйте Полиморфизм, если это возможно. Это сделает ваш код намного более чистым.
Ответ 8
Я бы назвал функцию и передал в дополнительных случаях, а в функции делал на них случай переключения. Делает более чистый код. Другой метод, который я часто использую, действительно вложен, если