如何检查数字是否是二进制和的结果?

Har*_*9pl 0 c# enums

我有这样的情况:

拿到 enum

enum MyType{
    None = 0,
    First = 1,
    Second = 2,
    Third = 4,
    //and so on 
}
Run Code Online (Sandbox Code Playgroud)

现在我不想检查给定的数字是否是二进制和的结果

int givenNumber = 3;
int result = 
//how to get that it's sum of 2 enums in this particular case would be (int)Type.First & (int)Type.Second == 3;
Run Code Online (Sandbox Code Playgroud)

希望我的问题足够清楚,有人可以帮助解决这个问题.

编辑

  1. 枚举值始终由2提供

  2. 我想写一个方法,应该检查给定的数字可以是一个不同的二元和例子:int givenNumber = 1; //1 , 3 ,5 and 7 will be the answer

  3. 真实生活样本:我在我的数据库中有承包商,每个承包商都可以生产者= 1,供应商= 2,服务= 4在db中我只能存储1个值int在这种情况下是最聪明的选择.当我将项目加载到我的服务组合框 - 承包商时,我想加载每一行,例如值为4或5或7(因为7 = 1 + 2 + 4,5 = 1 + 4和4 = 4).

现在我的问题更清楚了吗?

Ere*_*mez 5

你可以得到这样的个人枚举:

static IEnumerable<MyEnum> GetFlags(this MyEnum e)
{
    var flags = Enum.GetValues(typeof(MyEnum)).Cast<MyEnum>();
    foreach (var flag in flags)
        if ((flag & e) > 0) yield return flag;
}
Run Code Online (Sandbox Code Playgroud)

然后你可以像这样使用它:

int givenNumber = 3;
var results = ((MyEnum)givenNumber).GetFlags();
Run Code Online (Sandbox Code Playgroud)

  • 整齐!我也打算建议GetValues但是错过了关于foreach的观点 - 我今天(重新)学到了一些东西! (2认同)