是否有多个值的 switch 表达式的快捷方式可以给出相同的结果?

Is there a shortcut with switch expressions for multiple values to give the same result?

这是我现在的代码:

        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 具有相同条目的需要。有什么方法可以简化此操作吗?

您可以使用 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
};

您可以将您的数字分成百位和十位,并以此为基础逻辑。

那么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}");
}

但请注意,您的方法非常清晰易读。

我的建议真的只是为了简洁,可读性不高,任何逻辑上的改变都可能很糟糕。

但另一方面,在某些情况下可能会变得非常得心应手。