【发布时间】:2009-11-02 16:00:18
【问题描述】:
如果我有一个标有[Flags] 的enum,.NET 中是否有办法测试这种类型的值以查看它是否只包含一个值?我可以使用位计数获得我想要的结果,但如果可能的话,我宁愿使用内置函数。
当动态循环enum 值时,Enum.GetValues() 也会返回组合标志。在以下示例中对 enum 调用该函数会返回 4 个值。但是,我不希望将值 combinations 包含在内部算法中。测试单个 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)
{
// ???
}
【问题讨论】: