如果您有一个名为[Flags]
的{{1}}枚举实例,并且想要查看它是否等于clientType,那么有没有任何意义呢?
typeToAdjust
这不是一样的吗?:
(clientType & (int)typeToAdjust) == (int)typeToAdjust
答案 0 :(得分:1)
如果您在clientType中设置了多个标志,那么您必须执行第一个标记,尽管您也可以这样做:
(clientType & (int)typeToAdjust) != 0
你似乎错过了[Flags]
的整个想法,它允许设置一个或多个位。
答案 1 :(得分:0)
是的,但是有一个标志枚举的意义是你可以将它们组合起来
typeToAdjust = type1
clientType = type1 | type2
(clientType & (int)typeToAdjust) == (int)typeToAdjust // true
clientType == (int)typeToAdjust // false
答案 2 :(得分:0)
这两个陈述是不同的,但第二个是实际测试相等的陈述。如果clientType
具有typeToAdjust
中设置的位的超集,那么第一个表达式将评估为true,因为(clientType & (int)typeToAdjust)
仅评估为typeToAdjust
。通过超集,我的意思是typetoAdjust
中设置的所有位都设置在clientType
中,但也可能是一些额外的位。
答案 3 :(得分:0)
(clientType&(int)typeToAdjust)==(int)typeToAdjust
和 clientType ==(int)typeToAdjust
不一样
取clientType = 3和typeToAdjust = 1
clientType& (int)typeToAdjust = 1 = typeToAdjust 但clientType!=(int)typeToAdjust