繁体   English   中英

c#用一个标志设置两个标志一起

[英]c# set two flags with one flag together

当时我有两个按钮用于两个标志。 我想要 1 个设置两个标志的按钮

这些是标志:

if (InteractiveInput.Checked) flags |= CONNECT_INTERACTIVE;
if (PromptInput.Checked) flags |= CONNECT_PROMPT;

我想要:

if (InteractiveInput.Checked) flags |= CONNECT_INTERACTIVE & CONNECT_PROMPT;'''

按位与 (&) 表示每个位都为 1 的组合。
对于枚举标志值,这通常给出 0/None,因为除特殊情况外,枚举标志值故意是唯一的(按位),因此没有与其他枚举值匹配的位。

你想要按位或:

if (InteractiveInput.Checked)
    flags |= CONNECT_INTERACTIVE | CONNECT_PROMPT;

想象一下下面的例子:

[Flags]
public enum AdditionalCarParts
{
    None,
    AirConditioning,
    Sunroof,
    RearDoors
}

这被隐式定义为:

[Flags]
public enum AdditionalCarParts
{
    None = 0,
    AirConditioning = 1,
    Sunroof = 2,
    RearDoors = 4
}

或二进制:

  0
  1
 10
100

如您所见,这些都没有匹配,因此 AND 永远不会返回 None(0) 以外的任何内容。

使用不同运算符按位组合它们的两个示例:

AirConditioning (decimal: 1, binary: 001) & Sunroof (decimal: 2, binary: 010) = None (decimal: 0, binary: 000)  

AirConditioning (decimal: 1, binary: 001) | Sunroof (decimal: 2, binary: 010) = AirConditioning | Sunroof (decimal: 3, binary: 011)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM