在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#中标记枚举[重复]的主要内容,如果未能解决你的问题,请参考以下文章