我想编写一个使用 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
”
使用
_
丢弃符号和 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 对非常量字符串值进行模式匹配?