デフォルトでは、enum型の最初のフィールドには序数値が与えられます0。
したがって、 ifにフラグuriTypeが含まれていない場合、実際には equalsと評価されます。MyUriType.ForParseuriType & MyUriType.ForParse0trueMyUriType.ForParse0
ビット演算に分解すると、評価する式は次のようになります。
({something} & 0) == 0
true... 「何か」が何であれ、常に評価されます。
通常、Flags列挙型を定義するときは、実際には各フィールドの値を指定する必要があります。
[Flags]
public enum MyUriTypes
{
None = 0,
ForParse = 1,
ForDownload = 2,
ForSomethingElse = 4,
ForAnotherThing = 8
}
競合しないように、各値は 2 のべき乗でなければなりません (2 の倍数はバイナリの左シフトです)。
Flags列挙型を使用する人が列挙型であり、複数の値を保持できる/保持する必要があることを理解できるように、複数形で名前を付けるのも慣例です。
列挙型をこのように定義すると、テスト コードはビットが設定されていないfalse場合に評価されます。uriTypeForParse