簡體   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