enumeración de casos: ¿es mejor usar un interruptor o un diccionario?

Cuando se manejan los valores de una enumeración caso por caso, ¿es mejor usar una instrucción de cambio o un diccionario?

Pensaría que el diccionario sería más rápido. En términos de espacio, ocupa algo de memoria, pero la declaración del caso también ocuparía algo de memoria solo en la memoria necesaria para el programa en sí. Entonces, en conclusión, siempre es mejor usar el diccionario.

Aquí están las dos implementaciones lado a lado para la comparación:

Teniendo en cuenta estos enums:

enum FruitType
{
    Other,
    Apple,
    Banana,
    Mango,
    Orange
}
enum SpanishFruitType
{
    Otra,
    Manzana, // Apple
    Naranja, // Orange
    Platano, // Banana
    Pitaya // Dragon fruit, only grown in Mexico and South American countries, lets say
    // let's say they don't have mangos, because I don't remember the word for it.
}

Aquí está la manera de hacerlo con la instrucción switch:

private static SpanishFruitType GetSpanishEquivalent(FruitType typeOfFruit)
{
    switch(typeOfFruit)
    {
        case FruitType.Apple:
            return SpanishFruitType.Manzana;
        case FruitType.Banana:
            return SpanishFruitType.Platano;
        case FruitType.Orange:
            return SpanishFruitType.Naranja;
        case FruitType.Mango:
        case FruitType.Other:
            return SpanishFruitType.Otra;
        default:
            throw new Exception("what kind of fruit is " + typeOfFruit + "?!");
    }
}

Y aquí está cómo se hace con un diccionario:

private static Dictionary<FruitType, SpanishFruitType> EnglishToSpanishFruit = new Dictionary<FruitType, SpanishFruitType>()
{
    {FruitType.Apple, SpanishFruitType.Manzana}
    ,{FruitType.Banana, SpanishFruitType.Platano}
    ,{FruitType.Mango, SpanishFruitType.Otra}
    ,{FruitType.Orange, SpanishFruitType.Naranja}
    ,{FruitType.Other, SpanishFruitType.Otra}
};
private static SpanishFruitType GetSpanishEquivalentWithDictionary(FruitType typeOfFruit)
{
    return EnglishToSpanishFruit[typeOfFruit]; // throws exception if it's not in the dictionary, which is fine.
}

El diccionario no solo tiene el aumento de velocidad, sino que también tiene menos cadenas innecesarias en el código. ¿Siempre es mejor usar el diccionario entonces? ¿Hay incluso una tercera forma mejor?

Gracias por adelantado.

Respuestas a la pregunta(4)

Su respuesta a la pregunta