【发布时间】:2017-04-23 13:56:00
【问题描述】:
注意,这不是这个问题的欺骗:
Testing if a bitmask has one and only one flag
我需要验证位掩码是否包含多个标志。我想出了这种方法,但由于枚举和强制转换,我不太喜欢它。
[Flags]
enum MyFlags { a = 1, b = 2, c = 4, d = 8 }
var flags = Enum.GetValues(typeof(MyFlags)).Cast<MyFlags>();
Console.WriteLine(flags.Any(f => f == (MyFlags.a | MyFlags.c))); //false
Console.WriteLine(flags.Any(f => f == MyFlags.b)); //true
【问题讨论】:
-
如果您明确了所测试的输入/值是什么,您的示例可能会更清楚。我假设这是您目前获得文字表达式的地方,但它可能是已经设置的
MyFlags参数/变量?此外,如果您正在使用具有命名组合的枚举(例如FileShare.ReadWrite),不完全确定您的期望 -
如果字面上只是“这个值有多个位集”,那么您正在寻找的似乎是
population count。