从表示位值组合的位获取枚举值?

时间:2013-06-14 17:31:25

标签: c# enums bit-manipulation

我有这样的枚举类型:

  public enum MyEnum: ulong
  {
    All = 0UL,
    Func1 = 1UL,
    Func2 = 4UL,
    Func3 = 8UL,
    Func4 = 16UL,
    Func5 = 32UL,
    Func6 = 256UL,
    // and so on...
    // but notice this is the order, on purpose
  }

现在,我想确定是否可能,如果用户输入例如9应该是Func1和Func3的组合,如何将Func1和Func3从9输入到列表中。我在这个网站上搜索答案,但没有运气。我在.net 3.5中需要这个。如果有可能这是重复的问题,或者有类似的感谢你指出我。假设我无法改变它们,就像1 2 4 8 16 ...

由于

2 个答案:

答案 0 :(得分:0)

假设您查询的值为myUlong,请使用:

MyEnum myValue = (MyEnum)myUlong;
var result = 
    ((MyEnum[])Enum.GetValues(typeof(MyEnum))).Where(n => (n & myValue) != 0);
//that will get you your result

答案 1 :(得分:0)

你可以检查(n& myValue)!= 0或(n& myValue)== n