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

时间:2011-04-28 09:39:09

标签: c# enums bit-manipulation

我正在使用此代码来确定是否设置了特定标志。 是否有任何简短表达(不重复someFlag.flag1两次)?

[Flag]
enum someFlag
{
    flag1 = 0x0,
    flag2 = 0x2,
    flag3 = 0x4
}

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

如果没有,我会创建一个扩展方法。有什么想法吗?

3 个答案:

答案 0 :(得分:4)

如果您使用的是.NET4,则可以使用内置的HasFlag方法。

if (yourValue.HasFlag(someFlag.flag1)) DoSomething();

在早期版本的框架中,你已经得到的就好了(我认为这正是幕后的HasFlag)。

答案 1 :(得分:2)

使用Unconstrained Melody,您可以获得Enum.HasFlag的好处而无需.NET 4,增加了类型安全性,并且没有装箱:)

if (foo.HasAll(SomeFlag.Flag1))

(有HasAnyHasAll方法,因为您传递的参数可以包含要匹配的多个标记。)

答案 2 :(得分:1)

尝试:

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

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