寻找有人来证明我的逻辑。我继承了一个包含这个的方法:
If (a || b)
{
doTaskOne();
}
else
{
if (c)
{
doTaskOne()
}
doTaskTwo()
}
这样可以简化吗?
If ((a || b) || c))
{
doTaskOne();
}
else
{
doTaskTwo()
}
答案 0 :(得分:10)
这些不同,因为如果(a || b)
为false
和c == true
,则在第一个版本中会调用doTaskOne()
和doTaskTwo()
,而你的另类只会打电话给两个中的一个。
答案 1 :(得分:2)
if (a || b || c) doTaskOne();
if (!a && !b) doTaskTwo();
这是你要找的吗?
答案 2 :(得分:1)
你无法以更清洁的方式真正简化逻辑。
答案 3 :(得分:0)
如上所述,不,它不能。但考虑一下这方面的方法:
bool runMethodOne = false;
bool runMethodTwo = false;
if (a || b)
{
runMethodOne = true;
}
else
{
if (c)
{
runMethodOne = true;
}
runMethodTwo = true;
}
if(runMethodOne)
doTaskOne();
if(runMethodTwo)
doTaskTwo();
这使您可以灵活地调整布尔逻辑,例如
bool runMethodOne = (a || b);
bool runMethodTwo = !runMethodOne;
if(c)
runMethodOne = true;
或者
bool runMethodOne = false;
bool runMethodTwo = false;
if(c)
runMethodOne = true;
if(a||b)
runMethodOne = true;
else
runMethodTwo = true;
(根据代码的实际语义,这个调整可能会更清晰,也可能不会更清晰;我认为原始嵌套更清晰)