如果我有一个标有[Flags]
的enum
,有没有办法在.NET中测试此类型的值以查看它是否只包含单个值?我可以使用位计数来得到我想要的结果,但如果可能的话,我宁愿使用内置函数。测试单个值的[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。虽然绝对不是最透明的技术,但它无疑是最简单的技术。 – 2009-11-02 16:12:21