Есть метод который принимает строку и в зависимости от строки возвращает кортеж Tuple
с одним int
и одним string
значением. Проблема в том, что если расписать это как if-else
то получится более 20 вариантов. swith
не сработает для непостоянного значения а тернарный оператор для 2 значений разного типа. Вопрос - как упростить данный метод :
public static Tuple<int, string> Divide(string SubClass)
{
int Level = 0;
string Class = string.Empty;
try
{
if (SubClass.Contains("investment"))
{
Class = "bonds";
RiscLevel = 2;
return new Tuple<int, string>(RiscLevel, Class);
}
else if (SubClass.Contains("speculation"))
{
Class = "bonds";
RiscLevel = 4;
return new Tuple<int, string>(RiscLevel, Class);
}
// и еще много if-else
return null;
}
catch (Exception ex)
{
BOX.ShowError(ex.Message, ex.Source);
return null;
}
}
В результате получается огромный массив if-else
можно ли его как то сократить,
сделать более удобочитаемым?
Материализуйте ваши варианты в виде структуры:
class Case
{
public string SubClass { get; }
public string Class { get; }
public int RiscLevel { get; }
}
Соответственно, ваш набор if-else превратится в foreach:
Case[] cases = { ... };
// ...
foreach (Case case in cases)
if (SubClass.Contains(case.SubClass))
return Tuple.Create(RiscLevel, Class);
return null;
Можно вынести "investment" и "speculation" в отдельный массив и получать нужный через linq:
var foo = new []
{
//Желательно создать отдельный класс/структуру.
new { Name = "speculation", RiscLevel = 4, Class = "bonds" },
new { Name = "investment", RiscLevel = 2, Class = "bonds" },
};
var bar = foo.FirstOrDefault(s => SubClass.Contains(s.Name));
if (bar != null)
{
return new Tuple<int, string>(bar.RiscLevel, bar.Class);
}
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Во Vue компоненте есть массив pages, каждый элемент которого представляет из себя хеш
Понятно, что вопрос слабенький и так себе, и решение не знать ну просто стыдно, но все же очень-очень нужна помощь