2015-09-23 84 views
0

如果您有一個[Flags] enum實例,調用typeToAdjust,並且您想要查看它是否等於clientType,是否有任何要點執行此操作?按位與檢查平等

(clientType & (int)typeToAdjust) == (int)typeToAdjust 

不這樣做同樣的?:

clientType == (int)typeToAdjust 
+0

您是否錯誤地輸入了第二條語句?你的意思是'&'而不是'=='? –

+2

可能重複的[如何比較C#中的標誌?](http://stackoverflow.com/questions/40211/how-to-compare-flags-in-c) –

+0

不是真正的答案,具體問題;但是從FW4.5開始,您可以使用[HasFlag](https://msdn.microsoft.com/en-us/library/system.enum.hasflag%28v=vs.110%29.aspx)方法來簡化事情;它會做到這一點 – Sehnsucht

回答

1

如果您在clientType不止一個標誌設置,那麼你必須做的第一個,但你可以做到這一點也:

(clientType & (int)typeToAdjust) != 0 

你似乎已經錯過了[Flags]的整體思路,使人們或更多位來設置。

0

是,但有一個標誌枚舉的點,因此您可以將它們組合起來,從而

typeToAdjust = type1 
    clientType = type1 | type2 
    (clientType & (int)typeToAdjust) == (int)typeToAdjust // true 
    clientType == (int)typeToAdjust // false 
0

兩種說法都不同,但第二個是實際測試平等的那個。如果clientType具有在typeToAdjust中設置的位的超集,則第一個表達式將評估爲true,因爲(clientType & (int)typeToAdjust)只是計算爲typeToAdjust。通過超集,我的意思是在typetoAdjust中設置的所有位都被設置爲clientType,但也可能有一些額外的位。

0

(clientType &(INT)typeToAdjust)==(INT)typeToAdjust

和 clientType ==(INT)typeToAdjust

是不一樣的

採取clientType = 3和typeToAdjust = 1

clientType &(INT)typeToAdjust = 1 = typeToAdjust 但clientType!=(int)的typeToAdjust