Когда нужно попытаться исключить оператор switch? [Дубликат]
На этот вопрос уже есть ответ:
Переключатель (случай) всегда не так? 8 ответовЯ столкнулся с оператором 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? Мне бы очень хотелось знать, где они уместны, поэтому я не трачу слишком много времени, пытаясь исключить каждое высказывание переключателя, с которым я сталкиваюсь, только потому, что в некоторых обстоятельствах их считают запахо
Обновить По предложениюМайк Я немного искал дублирование этой логики и обнаружил, что кто-то создал логику в другом классе, что фактически сделало весь оператор switch избыточным. Таким образом, в контексте этого конкретного фрагмента кода оператор switch был ненужным. Тем не менее, мой вопрос больше касается уместности операторов switch в коде и того, должны ли мы всегда пытаться заменить их всякий раз, когда они найдены, поэтому в этом случае я склонен принять ответ, что этот оператор switch уместен.