Когда нужно попытаться исключить оператор 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 уместен.

Ответы на вопрос(13)

Ваш ответ на вопрос