是否有多个值的 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}");
}
但请注意,您的方法非常清晰易读。
我的建议真的只是为了简洁,可读性不高,任何逻辑上的改变都可能很糟糕。
但另一方面,在某些情况下可能会变得非常得心应手。
这是我现在的代码:
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}");
}
但请注意,您的方法非常清晰易读。
我的建议真的只是为了简洁,可读性不高,任何逻辑上的改变都可能很糟糕。
但另一方面,在某些情况下可能会变得非常得心应手。