以下の簡単な例に注意してください。
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
いずれにせよなります。
2 番目の方法をチェックする最初の方法を使用する正当な理由はありますか? (私の答えは VB.NET に対するものですが、これが他の場所、つまり C#、C++ などの潜在的な落とし穴であるかどうかも知りたいと思います)。
また、フラグの削除に関しては、これを行うには 2 つの方法があるようです。
test = test Xor Names.Test3
とtest = test And Not Names.Test3
ただし、1 つ目は、フラグがない場合は追加し、ある場合は削除しますが、2 つ目はフラグを削除するだけです。それが唯一の違いですか?または、ある方法を他の方法よりも優先する必要がある別の理由がありますか?