c# – 减少位顺序逻辑

我有以下代码,我想知道是否有更简洁,减少的方式来编写此代码:

(FontStyle是带有Flags属性的.NET Enum)

lblPrompt.Font.Style = FontStyle.Regular;

if (chkBold.Checked)
    lblPrompt.Font.Style |= FontStyle.Bold;
if (chkItalics.Checked)
    lblPrompt.Font.Style |= FontStyle.Italic;
if (chkUnderline.Checked)
    lblPrompt.Font.Style |= FontStyle.Underline;

我有一种感觉,答案在于正确应用和& CheckBox.Checked和所需标志之间的运算符,类似于以下内容:

lblPrompt.Font.Style =
    (chkBold.Checked & FontStyle.Bold)
    | (chkItalics.Checked & FontStyle.Italic)
    | (chkUnderline.Checked & FontStyle.Underline);

这不起作用,因为编译器显然不喜欢我用bool和Flag / Enum类型直接应用&符号.

最佳答案 这些方面的内容怎么样:

lblPrompt.Font.Style |=
    (chkBold.Checked ? FontStyle.Bold : 0)
    | (chkItalics.Checked ? FontStyle.Italic : 0)
    | (chkUnderline.Checked ?  FontStyle.Underline : 0);
点赞