enumでマークされている場合[Flags]、.NET でこの型の値をテストして、単一の値のみが含まれているかどうかを確認する方法はありますか? ビットカウントを使用して必要な結果を得ることができますが、可能であれば組み込み関数を使用したいと考えています。
enum値を動的にループするとEnum.GetValues()、組み合わせフラグも返されます。次の例でその関数を呼び出すと、enum4 つの値が返されます。ただし、内部アルゴリズムに値の組み合わせを含めたくありません。には多くの値が含まれる可能性があり、値が変更された場合は追加のメンテナンスが必要になるため、個々のenum値の等価性をテストすることはできません。enumenum
[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)
{
// ???
}