Я бы определил словарь и использовал бы его:
public static class IconService
{
private static Dictionary<string, string> _expenseIcons = new Dictionary<string, string>(StringComparer.OrdinalIgnoreCase) {
{ "phone", "fa-mobile-alt" },
{ "mobile", "fa-mobile-alt" },
{ "rent", "fa-mobile-alt" },
{ "mortgage", "fa-mobile-alt" },
{ "house", "fa-mobile-alt" },
{ "flat", "fa-mobile-alt" },
{ "apartment", "fa-mobile-alt" }
/* etc */
};
public static string GuessExpenseIcon(string input)
{
if (_expenseIcons.TryGetValue(input, out string expenseIcon)) // if the icon is found in the dictionary
{
return $"fas {expenseIcon}";
}
// default
return "fas fa-money-bill-alt";
}
}
Вы сказали, что вам нужно угадать его по строке, может работать наивный токенизация (разбиение по строке):
public static string GuessExpenseIcon(string input)
{
string[] parts = input.Split();
foreach (string part in parts)
{
if (_expenseIcons.TryGetValue(part, out string expenseIcon)) // if the icon is found in the dictionary
{
return $"fas {expenseIcon}";
}
}
// default
return "fas fa-money-bill-alt";
}
Я использовал регистр символов без учета регистра для ключа словаря, поэтому вам не нужно делать бит .ToLower()
. Я также извлек обычную часть "fas" иконки из того, что мы храним в словаре, поскольку она есть у каждой иконки.
Не думаю, что это обязательно лучше, чем ваше утверждение switch
, но это более элегантное решение, и оно также открывает возможность изменить настройку _expenseIcons
. Например, вы можете загрузить его из конфигурационного файла и т. Д. c.
С точки зрения эффективности, мы инициализируем словарь один раз за время существования приложения / домена приложения. эффективность поиска в самом словаре близка к O (1):
Получение значения с помощью его ключа очень быстро, близко к O (1), потому что класс Dictionary<TKey,TValue>
реализован в виде таблицы ha sh.