[英]Which is the better way to compare Flags Enum?
通常在比较标志枚举时,我使用以下格式:
(value & flag) == flag;
但有时我会碰到这个:
(value & flag) != 0;
只是想知道哪个更好用,还是归结为个人喜好?
如果您使用的是.net 4或更高版本,请使用Enum.HasFlag
事实上,这种方法使用第一种检查方式,但提供了更清晰的方法来检查标志
只要flag
是一位标志,它们就是等价的。 如果flag
有多个位,
(value & flag) == flag;
是一个逻辑AND(所有位必须匹配)while
(value & flag) != 0;
是逻辑OR(任何位必须匹配)。
这只是个人偏好。
两者的性能大致相同,结果总是相同的。 (假设是单线程环境。)
我想,第二个例子更容易复制/粘贴。
第二个例子对于交叉线程问题也是一个不那么有价值的(如果在表达式中间flag
突变,那么第一个问题就会发生奇怪的事情)。
如果要检查复合标志的值,例如值: 0x0111
,则标志: 0x0101
则(value & flags) == flags
表示“所有标志都已设置”, (value & flags) != 0
表示“任何标志是组”。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.