重构一个多层if-then

时间:2016-11-29 20:29:03

标签: c# if-statement

寻找有人来证明我的逻辑。我继承了一个包含这个的方法:

If (a || b)
{
   doTaskOne();
}
else
{
    if (c)
    {
        doTaskOne()
    }
    doTaskTwo()
}

这样可以简化吗?

If ((a || b) || c))
{
   doTaskOne();
}
else
{
    doTaskTwo()
}

4 个答案:

答案 0 :(得分:10)

这些不同,因为如果(a || b)falsec == 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;

(根据代码的实际语义,这个调整可能会更清晰,也可能不会更清晰;我认为原始嵌套更清晰)