请注意下面的简单示例:
Module Module1
<Flags>
Public Enum Names
None = 0
Test = 1
Test2 = 2
Test3 = 4
Test4 = 8
End Enum
Sub Main()
Dim test As Names = Names.Test Or Names.Test3
If (test And Names.Test3) = Names.Test3
Console.WriteLine("TRUE")
Else
Console.WriteLine("FALSE")
End If
End Sub
End Module
我的问题的第一部分与该行有关If (test And Names.Test3) = Names.Test3
。
If test And Names.Test3
简单地检查标志是否存在不是更好吗?如果它评估为非零值(意味着存在标志),那么条件的结果将是True
无论如何。
是否有充分的理由使用第一种方式检查第二种方式?(虽然我的答案是针对 VB.NET,但我也想知道这是否是其他任何地方的潜在陷阱,即 C#、C++ 等)。
此外,关于删除标志,似乎有两种方法可以做到这一点:
test = test Xor Names.Test3
和test = test And Not Names.Test3
但是,如果标志丢失,第一个将添加标志,如果存在则将其删除,而第二个只会将其删除。这是唯一的区别吗?或者还有其他原因为什么我应该更喜欢一种方法而不是另一种?