Убрать switch размером с гору Эверест

214
04 апреля 2018, 08:11

В общем, есть switch длиной с Эверест, как бы вы избавились от него, кроме как записывать это в Dictionary?

        switch (currencyLeft)
        {
            case "BTC":
                return 0.001m;
            case "BCH":
            case "ETH":
            case "FCT":
            case "NEO":
            case "UBTC":
            case "XEM":
            case "ZEC":
                return 0.01m;
            case "MCO":
            case "QTUM":
            case "REP":
            case "STX":
            case "VET":
                return 0.1m;
            case "ETC":
            case "DASH":
            case "LTC":
            case "XLM":
            case "XRP":
            case "XMR":
                return 0.5m;
            case "GAT":
                return 8m;
            case "BMC":
            case "DENT":
            case "DRG":
            case "ETN":
            case "FDX":
            case "FLIXX":
            case "FSN":
            case "GZE":
            case "IND":
            case "IXT":
            case "MTN":
            case "OAX":
            case "ONG":
            case "QASH":
            case "RKT":
            case "SAL":
            case "SER":
            case "SNIP":
            case "SPHTX":
            case "STAC":
            case "STORJ":
            case "STU":
            case "TPT":
            case "TRX":
            case "VZT":
                return 1m;
            default:
                throw new Exception("Unsupported symbol");
        }

UPD: сам switch и так находится в приватном методе, который возвращает decimal и принимает string. Задача в том, чтобы этот код (логику, если так можно "это" назвать) как-то упростить (уменьшить), если это возможно, но не словарем.

Answer 1

Хардкод значений и курсов в коде - это нехорошо.

Положите все это в CSV / JSON / базу данных. Т.е. в любое хранилище, кроме кода. Поднимайте из хранилища по первому обращению и десериализуйте в Dictionary<string, decimal>.

Answer 2

В switch – данные. Данные, по возможности, отделяют от логики программы. Раз уж данных много, можно хранить их в файлах, в настройках программы или в базе. Вот подходящий ответКак хранить данные в программе?

READ ALSO
Хранение делегатов в Dictionary

Хранение делегатов в Dictionary

Здравствуйте, подскажите как бы Вы написали следующий функционал, хочу узнать как можно реализовать это более эффективно, спасибо

210
SQL-инъекции, как бороться?

SQL-инъекции, как бороться?

Доброго времени сутокВ разрабатываемом приложении работа с данными БД происходит через запросы, формируемые следующим образом (например...

212
Частое пробуждение Alarm Manager Google Play

Частое пробуждение Alarm Manager Google Play

Подскажите что это значит (скрин), и какие способы решения есть, и соответственно из-за чего это может происходить ? Используется реклама Kidoz,...

192
WebSocket получение большого сообщения

WebSocket получение большого сообщения

При получении сообщения от сокета оно обрезаетсяПолучаю примерно 680,000 символов, хотя должно прийти сообщение примерно в 3 раза больше

245