如果我有一个标记为
当动态循环枚举值时,
[Flags]
的枚举,是否有一种方法在.NET中测试此类型的值以查看它是否仅包含单个值?我可以使用位计数获得想要的结果,但如果可能的话,我宁愿使用内置函数。当动态循环枚举值时,
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)
{
// ???
}