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

本文关键字:标志 枚举 设置 是否 何检查 检查 我应该 | 更新日期: 2023-09-27 17:47:46

在下面的两个方法中,您更喜欢阅读哪一个
是否有其他(更好的?)方法来检查是否设置了标志?

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

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


请投票选出你喜欢的方法。

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

这两个表达式做的事情不同(如果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
bool CheckFlag(FooFlag fooFlag)
{
    return fooFlag == (this.Foo & fooFlag);
}

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

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

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

我是一个积极的思想家:

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