c#标志比较“只包含”一组

这个问题在这里已经有了答案:

  • 在C#中,[Flags]枚举属性意味着什么? 10个答案

  • 首先,在定义一个标志枚举时,每个标志应该代表枚举中的一个位:

    enum X { a = 1, b = 2, c = 4, d = 8 }
    

    这可以让你结合标志:

    CandD = 12, //has both c and d flags set.
    

    或者如果你有很多他们:

    enum X { 
      a = 1 << 0, 
      b = 1 << 1, 
      c = 1 << 2, 
      d = 1 << 3,
      ...
      CAndD = c | d
    }
    

    您可以使用简单的相等比较来测试是否只设置了某些标志。

    public bool ContainsOnly(X value, X flags) 
    {
         return value == flags;
    }
    
    public bool ContainsOnlyCandD(X value) 
    {
         return value == (X.c | X.d);
    }
    
    public bool ContainsBothCandDButCouldContainOtherStuffAsWell(X value) 
    {
         return (value & (X.c | X.d)) == (X.c | X.d);
    }
    

    首先,你的标志应该是这样创建的:

    [Flags]
    public enum StatusType
    {
        None = 0
        A = 1,
        B = 2,
        C = 4,
        D = 8,
        E = 16,
        F = 32,
        G = 64
    }
    

    然后你可以这样分配:

    var statusType = StatusType.A | StatusType.B;
    

    并测试它:

    if (statusType.HasFlag(StatusType.A))
    {
        //A is defined
    }
    
    链接地址: http://www.djcxy.com/p/54447.html

    上一篇: c# flag comparison "only contain" a set

    下一篇: How to implement this using the bitwise & (and)?