enum
が[Flags]
と表示されている場合、この型の値をテストして単一の値しか含まないかどうかを調べる方法はありますか?私はビットカウントを使用したい結果を得ることができますが、可能であれば組み込み関数を使用したいと思います。単一値の[Flags]列挙型値のテスト
enum
の値を動的にループすると、Enum.GetValues()
も組み合わせフラグを返します。次の例のenum
でその関数を呼び出すと、4つの値が返されます。しかし、内部アルゴリズムにはの組み合わせが含まれています。は含まれません。 enum
の値が等しいかどうかのテストは、enum
には多くの値が含まれている可能性があり、enum
の値が変更された場合には追加のメンテナンスが必要なため、値が一致していません。関連
[Flags]
enum MyEnum
{
One = 1,
Two = 2,
Four = 4,
Seven = One | Two | Four,
}
void MyFunction()
{
foreach (MyEnum enumValue in Enum.GetValues(typeof(MyEnum)))
{
if (!_HasSingleValue(enumValue)) continue;
// Guaranteed that enumValue is either One, Two, or Four
}
}
private bool _HasSingleValue(MyEnum value)
{
// ???
}
:StackOverflow: Enum.IsDefined on combined flags
+1。間違いなく最も透明な技術ではありませんが、間違いなく最も簡単です。 –