在c#中标记枚举[重复]

Posted

技术标签:

【中文标题】在c#中标记枚举[重复]【英文标题】:Flag Enum in c# [duplicate] 【发布时间】:2016-03-23 06:25:58 【问题描述】:

我有一个枚举定义如下:

[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;

现在,number1 等价于 Number.six

number1 |=Number.third

现在,number1 等价于 Number.seven

之后,

我想得到 number1 等价于 Number.six

现在我的问题是:

是否可以进行 reverse OR,使 number1 仅包含 Number.first 和 Number.second 而不是 Number.first、Number.second 和 Number.third。

我是 Flag Enums 的新手,不确定这样的事情是否可行。

【问题讨论】:

试试number1 &= ~Number.third - 但我不确定这是否适用于枚举,但我猜是这样。 标志枚举与只是枚举没有区别,只是枚举只是整数。 感谢“Vera rind”这个作品。 这与标志枚举无关。你从不费心去学习布尔算术——这是很多编程的核心。 【参考方案1】:

您可以像number1 = number1 & Number.first 那样做,这将消除除Number.first 之外的每个 值,如果number1 没有Number.first,它会得到0

还可以考虑使用number1.HasFlag(Number.first),因为它通常比要检查的逻辑操作更具可读性。

【讨论】:

【参考方案2】:

你需要用~(补码)Number.third&

number1 &= ~Number.third;

【讨论】:

已经在“Vera rind”的评论中回答了

以上是关于在c#中标记枚举[重复]的主要内容,如果未能解决你的问题,请参考以下文章

在 C# 中使用枚举作为泛型类型参数 [重复]

c#枚举是不是可以出现重复值

将枚举值作为参数的通用 C# 方法[重复]

C#中的枚举类型约束[重复]

C#中的枚举类型约束[重复]

C#中的字符串枚举[重复]