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

Nes*_*cio 6 c# coding-style

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

 bool CheckFlag(FooFlag fooFlag)
 {
      return fooFlag == (this.Foo & fooFlag);
 }
Run Code Online (Sandbox Code Playgroud)

 bool CheckFlag(FooFlag fooFlag)
 {
      return (this.Foo & fooFlag) != 0;
 }
Run Code Online (Sandbox Code Playgroud)


请按照您喜欢的方式投票.

Mic*_*urr 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
Run Code Online (Sandbox Code Playgroud)


Chr*_*org 6

bool CheckFlag(FooFlag fooFlag)
{
    return fooFlag == (this.Foo & fooFlag);
}
Run Code Online (Sandbox Code Playgroud)