我有枚举标志。如何获取不包含特定标志的所有标志组合?
[Flags]
public enum TestEnum
{
A = 1,
B = 2,
C = 4,
D = 8
}
public static IEnumerable<Enum> AllNotContaining(this Enum value)
{....}
例如,TestEnum.A.AllNotContaining()
应返回 {2, 4, 6, 8, 10, 12, 14}
。
最佳答案
第 1 步,使用二进制 NOT:
var notUsedBits = ~ value;
但这将设置所有未使用的 32 位。
所以你可能需要一个面具:
[Flags]
public enum TestEnum
{
A = 1,
B = 2,
C = 4,
D = 8,
All = A|B|C|D, // or compute this inside the method
}
然后方法就变成了
// untested
public static TestEnum AllNotContaining(this TestEnum value)
{
return ~ value & TestEnum.All;
}
这不会返回 IEnumerable,但这对于 Flags 枚举来说很奇怪(而且效率低下)。
关于c# - 如何不包含标志,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52420131/