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