c# - 如何不包含标志

标签 c# enums flags enum-flags

我有枚举标志。如何获取不包含特定标志的所有标志组合?

[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/

相关文章:

java - 不同类型单位的抽象类

c++ - C 中的指针和枚举

php - 与 PHP 和 Python 共享 Memcache

c# - 创建动态公式

c# - Cosmos DB 分页和排序

c# - 监视特定文件关闭 c#

java - 是否可能有类似 : MyClass<T extends Enum<T> : implements IMyInterface> 的内容

c# - 按下左/右键时防止焦点改变

wpf - 如何在 MVVM 中将标志枚举绑定(bind)到 ListBox

assembly - 选择 EFLAGS 位的概率