当我运行此语句时,即使某些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()
只检查目标是否有容量。
答案 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)