Я столкнулся с оператором switch в кодовой базе, над которой я работаю, и я пытаюсь понять, как заменить ее чем-то лучше, поскольку switch считаются запахом кода. Однако, прочитав несколько сообщений о stackoverflow о вместо switch Я не могу представить эффективный способ замены этого конкретного оператора switch.
Его оставили мне интересно, является ли этот конкретный оператор switch в порядке, и если есть особые обстоятельства, когда утверждения switch считаются подходящими.
В моем случае код (слегка запутанный естественным образом), с которым я борюсь, выглядит следующим образом:
private MyType DoSomething(IDataRecord reader)
{
var p = new MyType
{
Id = (int)reader[idIndex],
Name = (string)reader[nameIndex]
}
switch ((string) reader[discountTypeIndex])
{
case "A":
p.DiscountType = DiscountType.Discountable;
break;
case "B":
p.DiscountType = DiscountType.Loss;
break;
case "O":
p.DiscountType = DiscountType.Other;
break;
}
return p;
}
Может ли кто-нибудь предложить способ устранить этот переключатель? Или это подходящее использование переключателя? И если это так, есть ли другие подходящие применения для операторов switch? Мне бы очень хотелось узнать, где они подходят, поэтому я не трачу слишком много времени, пытаясь устранить каждое выражение переключателя, с которым я сталкиваюсь, потому что в некоторых случаях они считаются запахом.
Обновление: По предложению Michael я немного искал дублирование этой логики и обнаружил, что кто-то создал логику в другой класс, который фактически сделал всю инструкцию switch избыточным. Поэтому в контексте этого конкретного кода кода оператор switch не нужен. Однако мой вопрос касается скорее соответствия операторов switch в коде и всегда ли мы должны их заменять, когда они найдены, поэтому в этом случае я склонен принять ответ, что этот оператор switch подходит.