繁体   English   中英

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

[英]What's the best expression to determine whether a specific flag is set

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

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

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

如果没有,我会创建一个扩展方法。 任何想法?

如果您使用的是 .NET4,那么您可以使用内置的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,否则标志将不起作用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM