Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/338.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# c语言中的标志枚举#_C#_Enums - Fatal编程技术网

C# c语言中的标志枚举#

C# c语言中的标志枚举#,c#,enums,C#,Enums,我的枚举定义如下: [Flags] public enum Number { first=1, second=2, third=4, Forth=8, fifth=16, six=Number.second|Number.first, seven=Number.second|Number.first|Number.third } 我知道可以组合枚举值 例如: Number number1 = Number.first; number1

我的枚举定义如下:

[Flags]
public enum Number
{
    first=1,
    second=2,
    third=4,
    Forth=8,
    fifth=16,
    six=Number.second|Number.first,
    seven=Number.second|Number.first|Number.third

}
我知道可以组合枚举值

例如:

Number number1 = Number.first;
number1 |= Number.second;
现在,数字1等于数字6

number1 |=Number.third
现在,数字1等于数字7

此后,

我想让1号等于6号

number1 |=Number.third
现在我的问题是:

有没有可能对OR进行反向操作,使数字1只包含Number.first和Number.second,而不是Number.first、Number.second和Number.third


我不太熟悉标记枚举,不确定这样做是否可行。

你可以像
number1=number1&Number那样做。首先
,这将消除
Number以外的所有值。首先
,如果
number1
没有
Number。首先
它得到
0


也考虑使用<代码>编号1. HasFlag(数字第一)因为它通常比要检查的逻辑运算可读性强得多。

你可以像
number1=number1&Number那样做。首先
,它会消除
数以外的所有值。首先
如果
number1
没有
数,那么它会得到
0


也考虑使用<代码>编号HasFlag(编号:第一)< /C> >因为它比逻辑操作要更可读。

< p>您需要<代码>和<代码>代码< >代码>(补码)<代码>编号。第三< /代码> < /p>
number1 &= ~Number.third;

您需要使用
编号的
~
(补码)来
&
它。第三个

number1 &= ~Number.third;

请尝试
number1&=~Number.third
-但我不确定这是否适用于枚举,但我猜是这样的。标志枚举与仅枚举不同,仅枚举只是整数。感谢“Vera rind”,这是有效的。这与标志枚举无关。你从来没有费心学习布尔算术——这是很多编程的核心。试试
number1&=~Number.third
——但我不确定这是否适用于枚举,但我猜是这样。标志枚举和仅仅枚举没有什么不同,仅仅枚举就是整数。谢谢“Vera rind”,这是有效的。这与标志枚举无关。你从来没有费心学习布尔算术——这是很多编程的核心。在评论中已经回答了“Vera rind”的问题,在评论中已经回答了“Vera rind”