如果您有一个[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