Страницы

Поиск по вопросам

понедельник, 10 декабря 2018 г.

Сократить множество if-else

Есть метод, который принимает строку и в зависимости от строки возвращает кортеж Tuple с одним int и одним string значением. Проблема в том, что если расписать это как if-else то получится более 20 вариантов. switch не сработает для непостоянного значения, а тернарный оператор - для 2 значений разного типа. Вопрос - как упростить данный метод:
public static Tuple Divide(string SubClass) { int Level = 0; string Class = string.Empty; try {
if (SubClass.Contains("investment")) { Class = "bonds"; RiscLevel = 2; return new Tuple(RiscLevel, Class); } else if (SubClass.Contains("speculation")) { Class = "bonds"; RiscLevel = 4; return new Tuple(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;

Комментариев нет:

Отправить комментарий