请注意下面的简单示例:
我的问题的第一部分涉及到这行代码:
如果仅检查标志是否存在,检查
是否有使用第一种方式而不是第二种进行检查的充分理由? (虽然我的答案适用于VB.NET,但我也想知道这是否是其他地方可能出现的潜在陷阱,例如C#,C ++等)。
另外,在删除标志方面,似乎有两种方法:
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
然而,第一种方法会添加标志(如果标志丢失)并删除它(如果存在),而第二种方法只会删除它。那是唯一的区别吗? 还是有其他原因我应该更喜欢其中一种方法?
Xor
看起来对我来说工作得很好,它只是一次性完成所有操作。在你的例子中,它添加了Names.Test2
,因为它不存在,并删除了Names.Test3
,因为它已经存在! - Interminable