确定是否设置了特定标志的最佳表达式是什么?

本文关键字:最佳 表达式 是什么 是否 设置 标志 | 更新日期: 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))

(有HasAnyHasAll方法,因为你传递的参数可以包含多个标志来匹配)

尝试:

if ((someFlag & someFlag.flag1) != 0)

另外,你不应该有flag1 = 0 -它需要是0x01,否则标志将不起作用