[ 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
{
}
您好,
我需要一些比较标志的帮助。如何知道标志枚举变量是否只包含某些特定值?
答案 0 :(得分:1)
首先,在定义标志枚举时,每个标志应代表枚举中的一个位:
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);
}
答案 1 :(得分:1)
首先,你的标志应该这样创建:
[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
}