如果您有一個[Flags]
enum實例,調用typeToAdjust
,並且您想要查看它是否等於clientType,是否有任何要點執行此操作?按位與檢查平等
(clientType & (int)typeToAdjust) == (int)typeToAdjust
不這樣做同樣的?:
clientType == (int)typeToAdjust
如果您有一個[Flags]
enum實例,調用typeToAdjust
,並且您想要查看它是否等於clientType,是否有任何要點執行此操作?按位與檢查平等
(clientType & (int)typeToAdjust) == (int)typeToAdjust
不這樣做同樣的?:
clientType == (int)typeToAdjust
如果您在clientType不止一個標誌設置,那麼你必須做的第一個,但你可以做到這一點也:
(clientType & (int)typeToAdjust) != 0
你似乎已經錯過了[Flags]
的整體思路,使人們或更多位來設置。
是,但有一個標誌枚舉的點,因此您可以將它們組合起來,從而
typeToAdjust = type1
clientType = type1 | type2
(clientType & (int)typeToAdjust) == (int)typeToAdjust // true
clientType == (int)typeToAdjust // false
兩種說法都不同,但第二個是實際測試平等的那個。如果clientType
具有在typeToAdjust
中設置的位的超集,則第一個表達式將評估爲true,因爲(clientType & (int)typeToAdjust)
只是計算爲typeToAdjust
。通過超集,我的意思是在typetoAdjust
中設置的所有位都被設置爲clientType
,但也可能有一些額外的位。
(clientType &(INT)typeToAdjust)==(INT)typeToAdjust
和 clientType ==(INT)typeToAdjust
是不一樣的
採取clientType = 3和typeToAdjust = 1
clientType &(INT)typeToAdjust = 1 = typeToAdjust 但clientType!=(int)的typeToAdjust
您是否錯誤地輸入了第二條語句?你的意思是'&'而不是'=='? –
可能重複的[如何比較C#中的標誌?](http://stackoverflow.com/questions/40211/how-to-compare-flags-in-c) –
不是真正的答案,具體問題;但是從FW4.5開始,您可以使用[HasFlag](https://msdn.microsoft.com/en-us/library/system.enum.hasflag%28v=vs.110%29.aspx)方法來簡化事情;它會做到這一點 – Sehnsucht