我有这样的情况:
拿到 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)
希望我的问题足够清楚,有人可以帮助解决这个问题.
编辑
枚举值始终由2提供
我想写一个方法,应该检查给定的数字可以是一个不同的二元和例子:int givenNumber = 1; //1 , 3 ,5 and 7 will be the answer
现在我的问题更清楚了吗?
你可以得到这样的个人枚举:
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)