我应该如何检查标志枚举中是否设置了标志?

时间:2008-10-15 13:34:42

标签: c# coding-style

以下两种方法中,您更喜欢阅读哪种方法? 还有另一种(更好的?)方法来检查是否设置了标志?

 bool CheckFlag(FooFlag fooFlag)
 {
      return fooFlag == (this.Foo & fooFlag);
 }

 bool CheckFlag(FooFlag fooFlag)
 {
      return (this.Foo & fooFlag) != 0;
 }

<小时/> 请按照您喜欢的方式进行投票。

6 个答案:

答案 0 :(得分:9)

这两个表达式做了不同的事情(如果fooFlag设置了多个位),那么哪个更好取决于你想要的行为:

fooFlag == (this.Foo & fooFlag) // result is true iff all bits in fooFlag are set


(this.Foo & fooFlag) != 0       // result is true if any bits in fooFlag are set

答案 1 :(得分:6)

bool CheckFlag(FooFlag fooFlag)
{
    return fooFlag == (this.Foo & fooFlag);
}

答案 2 :(得分:3)

我更喜欢第一个,因为它更具可读性。

答案 3 :(得分:2)

bool CheckFlag(FooFlag fooFlag)
{
    return (this.Foo & fooFlag) != 0;
}

答案 4 :(得分:1)

我更喜欢第一个。我在布尔表达式中谨慎使用!= 0。

答案 5 :(得分:-2)

我是一个积极的思想家:

bool CheckFlag(FooFlag fooFlag)
{
  return this.Foo & fooFlag == 1;
}