enum case management - лучше использовать переключатель или словарь?
При обработке значений перечисления в каждом конкретном случае лучше использовать оператор switch или словарь?
Я думаю, что словарь будет быстрее. С точки зрения пространства, он занимает немного памяти, но оператор case также занимал бы немного памяти только в памяти, необходимой для самой программы. Итак, суть яя думаю этоВсегда лучше просто использовать словарь.
Вот две реализации для сравнения:
Учитывая эти перечисления:
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.
}
Вот способ сделать это с помощью оператора 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 + "?!");
}
}
А вот как это делается с помощью словаря:
private static Dictionary EnglishToSpanishFruit = new Dictionary()
{
{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.
}
Мало того, что словарь имеет повышение скорости, он также содержит меньше ненужных строк в коде. Всегда ли лучше использовать словарь? Есть ли третий способ лучше?
Заранее спасибо.