代码之家  ›  专栏  ›  技术社区  ›  Clarky

If语句始终返回true c#[闭合]

  •  -7
  • Clarky  · 技术社区  · 8 年前

    当我运行这个语句时,我总是得到true的返回,即使一些布尔值返回false。有什么解决方法吗?

    public bool Enabled() {
              foreach (LinkIn link in linksIn) {
                if (link.source.amount < link.amount) {
                  return false;
                }
              }
              //Not checking capacity correctly
              foreach (LinkOut link in linksOut) {
                if (link.target.Limited()
                    && link.target.capacity < link.amount
                    && link.target.amount + link.amount > link.target.capacity)
                    {
                     return false;
                    }
              }
              return true;
            }
    

    这个 link.target.Limited() 只需检查目标是否有容量。

    1 回复  |  直到 8 年前
        1
  •  2
  •   Ken Y-N    8 年前

    为了解决这些要求,我认为您想要的是:

    如果目标是Limited(),那么如果我们的容量大于容量,或者目标中没有足够的空间来添加我们的数量,则会失败

    因此,这将使条件:

    if (link.target.Limited()
     && (link.target.capacity < link.amount
           || link.target.amount + link.amount > link.target.capacity))
    

    为了更加对称,通过交换第三个表达式的LHS和RHS,可以将其写成:

    if (link.target.Limited()
     && (link.target.capacity < link.amount
      || link.target.capacity < link.target.amount + link.amount))
    

    现在,我们可以进一步看到 link.target.capacity < link.amount 当且仅当 link.target.capacity < link.target.amount + link.amount 也是如此,因此我们可以简化为:

    if (link.target.Limited()
     && link.target.capacity < link.target.amount + link.amount)