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