我正在使用此代码来确定是否设置了特定标志。
是否有任何简短表达(不重复someFlag.flag1
两次)?
[Flag]
enum someFlag
{
flag1 = 0x0,
flag2 = 0x2,
flag3 = 0x4
}
if ((someFlag & someFlag.flag1) == someFlag.flag1)
如果没有,我会创建一个扩展方法。有什么想法吗?
答案 0 :(得分:4)
如果您使用的是.NET4,则可以使用内置的HasFlag
方法。
if (yourValue.HasFlag(someFlag.flag1)) DoSomething();
在早期版本的框架中,你已经得到的就好了(我认为这正是幕后的HasFlag
)。
答案 1 :(得分:2)
使用Unconstrained Melody,您可以获得Enum.HasFlag
的好处而无需.NET 4,增加了类型安全性,并且没有装箱:)
if (foo.HasAll(SomeFlag.Flag1))
(有HasAny
和HasAll
方法,因为您传递的参数可以包含要匹配的多个标记。)
答案 2 :(得分:1)
尝试:
if ((someFlag & someFlag.flag1) != 0)
此外,你不应该有flag1 = 0 - 它需要是0x01,否则标志将不起作用。