检查是否未设置所有枚举值

msf*_*boy 1 c# enums flags

是否有可能使用ONE-Liner(正常方式......)来检查是否设置了所有可能的枚举状态?

从enum水果我想知道它没有设置意味着没有香蕉,没有苹果,没有甜瓜.

我怎样才能做到这一点?

Ada*_*rth 6

将:

myFlags == 0

满足?0表示没有设置位,假设您正在使用标志并且没有对值进行任何操作.

鉴于这个枚举:

[Flags]
enum Fruit
{
    Forbidden = 0,
    Apple = 1,
    Orange = 2,
    Banana = 4
}
Run Code Online (Sandbox Code Playgroud)

这段代码:

Fruit f = Fruit.Apple | Fruit.Banana;

if (f == 0)
    MessageBox.Show("what?");

f = Fruit.Forbidden;

if (f == 0)
    MessageBox.Show("expected");
Run Code Online (Sandbox Code Playgroud)

它完成了你所期望的,但是它检查底层值没有按位操作,所以如果你错误地改变底层值你会开始遇到问题,但你也会遇到其他问题.

鉴于:

[Flags]
enum Fruit
{
    Apple = 1,
    Orange = 2,
    Banana = 4
}
Run Code Online (Sandbox Code Playgroud)

和:

Fruit f = Fruit.Apple | Fruit.Banana;

if (f == 0)
    MessageBox.Show("what?");

f = f & ~Fruit.Apple & ~Fruit.Banana;

if (f == 0)
    MessageBox.Show("expected");
Run Code Online (Sandbox Code Playgroud)

也表现.