Существует ли ярлык с выражениями-переключателями для нескольких значений, чтобы получить одинаковый результат? - PullRequest
0 голосов
/ 02 апреля 2020

Вот код, который у меня сейчас есть:

        var pageTitleFont = Settings.Fs switch
        {
            140 => 1.1,
            130 => 1.1,
            120 => 1.1,
            110 => 1.1,
            100 => 1,
            90 => 0.9,
            _ => 1
        };

Что я хотел бы сделать, это уменьшить необходимость иметь одинаковые записи для 110, 120, 130 и 140. Есть ли способ сократить это?

Ответы [ 2 ]

3 голосов
/ 02 апреля 2020

Вы можете использовать условие when:

var pageTitleFont = Settings.Fs switch
{
    var x when x == 110 || x == 120 || x == 130 || x == 140 => 1.1,
    100 => 1,
    90 => 0.9,
    _ => 1
};
1 голос
/ 02 апреля 2020

Вы можете разделить свое число на сотни и десятки и базовые логики c.

Тогда выражение switch станет действительно лаконичным:

var test = Enumerable.Range(5, 12).Select(i => i * 10).ToArray();
foreach (int i in test)
{
    var hundreds = i / 100;
    var tens = (i % 100) / 10;
    var result = (hundreds == 1, tens < 5, tens > 0, tens == 9) switch
    {
      (true, true, true, false) => 1.1,
      (false, false, true, true) => 0.9,
      (_, _, _, _) => 1,
    };
    Console.WriteLine($"{i} => {result}");
}

Но обратите внимание, что вы подход очень ясен и читабелен.

Мое предложение ДЕЙСТВИТЕЛЬНО ТОЛЬКО с точки зрения краткости, оно мало читабельно и любые изменения в логи c могут быть ужасны.

Но с другой стороны рука, в некоторых случаях может стать очень удобным.

...