2015-09-23 95 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