对于单个值测试[国旗]枚举值 [英] Testing a [Flags] enum value for a single value

查看:95
本文介绍了对于单个值测试[国旗]枚举值的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

如果我有一个枚举的标有1 [国旗] ,有没有办法在.NET测试这种类型的一个值,看它是否仅包含一个值?我能得到我想要用位计数的结果,但我如果可能的话宁愿使用内置的功能。

If I have an enum that's marked with [Flags], is there a way in .NET to test a value of this type to see if it only contains a single value? I can get the result I want using bit-counting, but I'd rather use built-in functions if possible.

在通过枚举值动态循环, Enum.GetValues​​()返回组合标志为好。呼吁枚举该功能在下面的示例返回4个值。不过,我不希望值的组合的包括内部算法研究。测试个别枚举值是否相等出来了,因为枚举可能包含许多价值,而且还需要额外的维护当在枚举变化的值。

When looping through the enum values dynamically, Enum.GetValues() returns the combination flags as well. Calling that function on the enum in the following example returns 4 values. However, I don't want the value combinations included in the inner algorithm. Testing individual enum values for equality is out, since the enum could potentially contain many values, and it also requires extra maintenance when the values in the enum change.

[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)
{
    // ???
}



相关阅读:计算器:Enum.IsDefined上结合标志



Related: StackOverflow: Enum.IsDefined on combined flags

推荐答案

您可以将它转换成int和使用的技术来自的链接文本,以检查它是否为二的幂。

You can cast it to int and use the techniques from link text to check if it's a power of two.

这篇关于对于单个值测试[国旗]枚举值的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆