繁体   English   中英

测试单个值的[Flags]枚举值

[英]Testing a [Flags] enum value for a single value

如果我有一个用[Flags]标记的enum ,在.NET中是否有办法测试此类型的值以查看它是否只包含单个值? 我可以使用位计数得到我想要的结果,但如果可能的话我宁愿使用内置函数。

在动态循环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

您可以将其转换为int并使用Bit Twiddling Hacks中的技术来检查它是否是2的幂。

int v = (int)enumValue;
return v != 0 && (v & (v - 1)) == 0;

您可以使用IsDefined和检查2的幂的组合。

你可以使用Enum.GetValues并只计算那些幂为2的项(可以被2整除,没有余数)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM