如何使用 switch 表达式来匹配等于另一个非常量值的值[重复]

问题描述 投票:0回答:1

我想编写一个使用 C#11 将 WPF

System.Windows.FontWeight
属性转换为其等效 CSS 值的方法。 switch 表达式 似乎是最合适的构造。这是我的尝试:

    string ToCssValue(FontWeight value) => value switch
    {
        FontWeights.Bold => "bold",
        FontWeights.ExtraBold => "bolder",
        FontWeights.Normal => "normal",
        FontWeights.Light => "lighter",
        _ => value.ToOpenTypeWeight().ToString(CultureInfo.InvariantCulture),
    };

但是,我在

FontWeights.Bold
上收到错误:需要“FontWeight”类型的常量值。发生这种情况是因为
FontWeights.Bold
是对
FontWeight
结构的特定实例的引用。由于
FontWeight
是一个值类型,所以 switch 表达式足够聪明,知道我的意思是使用默认相等性(对于值类型来说是“按值”)在
value
上切换
FontWeights.Bold
。然而,似乎不是。

如何使用 switch 表达式使用默认相等性将变量的值与另一个非常量值进行匹配,或者换句话说,如何“在等于

value
时打开
FontWeights.Bold

c# pattern-matching equality c#-11.0 switch-expression
1个回答
0
投票

使用

_
丢弃符号和
when
关键字,后跟等式表达式来匹配非常量值上的
value

    string ToCssValue(FontWeight value) => value switch
    {
        _ when value == FontWeights.Bold => "bold",
        _ when value == FontWeights.ExtraBold => "bolder",
        _ when value == FontWeights.Normal => "normal",
        _ when value == FontWeights.Light => "lighter",
        _ => value.ToOpenTypeWeight().ToString(CultureInfo.InvariantCulture),
    };

感谢这个问答:如何使用 Switch 对非常量字符串值进行模式匹配?

© www.soinside.com 2019 - 2024. All rights reserved.