代码之家  ›  专栏  ›  技术社区  ›  Jon Seigel

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

  •  10
  • Jon Seigel  · 技术社区  · 16 年前

    enum 标有 [Flags]

    Enum.GetValues() 枚举 在以下示例中,返回4个值。但是,我不想要这个值 组合 包含在内部算法中。测试个人 枚举 枚举 枚举 改变。

    [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 on combined flags

    3 回复  |  直到 9 年前
        1
  •  20
  •   Henrik    10 年前

    int Bit Twiddling Hacks 检查它是否是2的幂。

    int v = (int)enumValue;
    return v != 0 && (v & (v - 1)) == 0;
    
        2
  •  0
  •   leppie    16 年前

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

        3
  •  -1
  •   TLiebe    16 年前

    你可以枚举。GetValues,只计算2的幂(可被2整除,无余数)。