是否有可能使用ONE-Liner(正常方式......)来检查是否设置了所有可能的枚举状态?
从enum水果我想知道它没有设置意味着没有香蕉,没有苹果,没有甜瓜.
我怎样才能做到这一点?
将:
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)
也表现.