繁体   English   中英

哪个是比较Flags Enum的更好方法?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM