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

本文关键字:只包含 一组 包含 标志 比较 | 更新日期: 2023-09-27 18:03:06

[ Flags ]
public enum StatusType { a,b,c,d,e,f,g }
StatusType m_StatusType = a | b;
If ( m_StatusType only contains a and b )  // I need help here
{ 
}

,你好

我需要一些比较标志的帮助。我怎么知道如果一个标志枚举变量只包含一些特定的值?

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

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

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
}