C# 将两个标志设置为一个标志



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

这些是标志:

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

我想要:

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

按位 AND (&( 表示每个位的组合,其中两者都为 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)

最新更新