如果语句总是返回true c#

时间:2017-12-05 04:14:20

标签: c# if-statement boolean

当我运行此语句时,即使某些bools返回false,我也总是返回true。关于修复的任何想法?

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 个答案:

答案 0 :(得分:2)

尝试制定要求,我认为你想要的是:

  

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

所以,这将成为条件:

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)