【问题标题】:How should I check if a flag is set in a flags enum? [closed]我应该如何检查标志枚举中是否设置了标志? [关闭]
【发布时间】:2008-10-15 13:34:41
【问题描述】:

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

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

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


请投票赞成您喜欢的方法。

【问题讨论】:

    标签: c# coding-style


    【解决方案1】:

    这两个表达式做不同的事情(如果 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
    

    【讨论】:

    • 谢谢!我想我只是以一种方式看待它。即,“我的位设置了吗”我想知道是否也设置了“任何”位可能会有所帮助!
    【解决方案2】:
    bool CheckFlag(FooFlag fooFlag)
    {
        return fooFlag == (this.Foo & fooFlag);
    }
    

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        【解决方案4】:
        bool CheckFlag(FooFlag fooFlag)
        {
            return (this.Foo & fooFlag) != 0;
        }
        

        【讨论】:

          【解决方案5】:

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

          【讨论】:

            【解决方案6】:

            我是一个积极的思考者:

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

            【讨论】:

            • 如果 FooFlag 的值为 2 会怎样?
            • 他说他是一个积极的思想家:)
            • 我的立场是正确的——在写作之前思考是有帮助的;)
            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2010-11-23
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2011-03-09
            相关资源
            最近更新 更多