¿Cuándo se debe tratar de eliminar una declaración de cambio? [duplicar

Esta pregunta ya tiene una respuesta aquí:

¿El interruptor (caso) siempre está mal? 8 respuestas

Me he encontrado con una declaración de cambio en la base de código en la que estoy trabajando y estoy tratando de descubrir cómo reemplazarla con algo mejor desdeas declaraciones de @switch se consideran un olor a código. Sin embargo, después de haber leídovario publicaciones en stackoverflow sobre reemplazando cambia declaraciones Parece que no puedo pensar en una forma efectiva de reemplazar esta declaración de cambio en particular.

e dejó preguntándome si esta declaración de cambio en particular está bien y si hay circunstancias particulares en las que las declaraciones de cambio se consideran apropiadas.

En mi caso, el código (ligeramente ofuscado naturalmente) con el que estoy luchando es así:

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;
}

¿Alguien puede sugerir una forma de eliminar este cambio? ¿O es este un uso apropiado de un interruptor? Y si es así, ¿hay otros usos apropiados para las declaraciones de cambio? Realmente me gustaría saber dónde son apropiados para no perder mucho tiempo tratando de eliminar cada declaración de cambio que encuentro solo porque se consideran un olor en algunas circunstancias.

Actualizar Por sugerencia deMigue Hice un poco de búsqueda de la duplicación de esta lógica y descubrí que alguien había creado lógica en otra clase que efectivamente hacía que toda la declaración del interruptor fuera redundante. Por lo tanto, en el contexto de este bit de código en particular, la declaración de cambio era innecesaria. Sin embargo, mi pregunta es más sobre la idoneidad de las declaraciones de cambio en el código y si siempre debemos tratar de reemplazarlas cada vez que se encuentren, por lo que en este caso me inclino a aceptar la respuesta de que esta declaración de cambio es apropiada.

Respuestas a la pregunta(13)

Su respuesta a la pregunta