【问题标题】:Setting a boolean value based on an integer基于整数设置布尔值
【发布时间】:2009-01-07 14:03:25
【问题描述】:

我发现这个语句是一些旧代码,我花了一秒钟才弄清楚......

IsTestActive = (TestStateID == 1 ? true : false);

如果我错了,请纠正我,但这不是和这个一样吗?:

IsTestActive = (TestStateID == 1);

如果是,您为什么要使用第一个?哪个更具可读性? (我认为是后者,但我想看看其他人的想法。)

【问题讨论】:

    标签: c# coding-style readability


    【解决方案1】:

    是的,完全一样。

    是的,后者更具可读性。

    【讨论】:

    • 我只见过两类人使用前者:对布尔逻辑缺乏基本理解的人,或者认为三元运算符真的很酷的人。
    • 前者理论上会有一分钟的性能命中,但如果你关心这种性能水平,那么我怀疑你有更大的问题......
    【解决方案2】:
    IsTestActive = (TestStateID == 1);
    

    肯定更易读。

    可以为定义一个常量提出一个案例

    ACTIVE = 1
    

    然后将布尔变量 IsTestActive 替换为

    (TestStateID == ACTIVE)
    

    按照现在的代码方式,如果TestStateID 的状态在没有更新布尔值的情况下发生更改,则布尔值IsTestActive 的状态将是错误的。绕过布尔值并测试您所追求的信息的真实来源将消除此错误的可能性。

    【讨论】:

    • 好点,我讨厌魔术整数 - 但我认为 OP 只是发布示例代码
    • 可能是这样,但我确实看到很多人在生产代码中使用这样的临时变量。
    【解决方案3】:

    不,使用第一个版本没有实际理由,世界并不完美,and neither are programmers.

    【讨论】:

      【解决方案4】:

      可读性取决于您在何处使用此构造。我经常发现类似的东西

      (TestStateID == 1 ? true : false)
      

      更具可读性。

      【讨论】:

        【解决方案5】:

        嗯,我不知道其他语言,但在 PHP 中使用类型转换更容易:

        $IsTestActive = (boolean)$TestStateId;
        

        【讨论】:

          猜你喜欢
          • 2014-01-17
          • 2022-07-27
          • 2021-10-11
          • 2021-04-12
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-12-13
          相关资源
          最近更新 更多