确定是否设置了特定标志的最佳表达式是什么?
本文关键字:最佳 表达式 是什么 是否 设置 标志 | 更新日期: 2023-09-27 17:53:20
我使用这段代码来确定是否设置了特定的标志。是否有简短的表达(不重复两次someFlag.flag1
)?
[Flag]
enum someFlag
{
flag1 = 0x0,
flag2 = 0x2,
flag3 = 0x4
}
if ((someFlag & someFlag.flag1) == someFlag.flag1)
如果没有,我会创建一个扩展方法。任何想法?
如果你正在使用。net 4,那么你可以使用内置的HasFlag
方法。
if (yourValue.HasFlag(someFlag.flag1)) DoSomething();
在框架的早期版本中,你已经得到的是好的(我认为这正是HasFlag
在幕后所做的)。
使用Unconstrained Melody,您可以在不需要。net 4的情况下获得Enum.HasFlag
的好处,增加了类型安全性,并且没有装箱:)
if (foo.HasAll(SomeFlag.Flag1))
(有HasAny
和HasAll
方法,因为你传递的参数可以包含多个标志来匹配)
尝试:
if ((someFlag & someFlag.flag1) != 0)
另外,你不应该有flag1 = 0 -它需要是0x01,否则标志将不起作用