当时我有两个标志的按钮。 我想要 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)