在这种情况下如何避免别的

时间:2014-02-28 14:02:24

标签: c# java syntax

考虑这段代码 -

if(enable) {
  if(enableCar) {
    // do something
  } else if(enableComputer) {
    // do something
  } else if(enableTV) {
    // do something
  } else {
    otherChoice();
  }
} else {
  otherChoice();
}

// More code here so return isn't possible

我应该如何避免这么多else语句,我无法删除if(enable),因为carEnable可以返回true,而enable本身则为false。

我不能使用return,因为我有更多代码

那么我应该如何避免这么多else陈述?

当然这只是一个例子:)

由于

6 个答案:

答案 0 :(得分:2)

您尚未完全明确要求,但我认为您的要求需要switch阻止。

[修改]:之后添加了Java的代码 - 您可以使用enum进行此操作。

答案 1 :(得分:1)

您可以将选项添加到枚举中并将其传递给开关。

public enum EnableOptions
{
   enableCar,

   enableComputer,

  enableTV


}

然后为该选项创建一个变量并将其传递给开关:

EnableOptions option = EnableOptions.enableCar;



if(enabled)
{

    switch(option)
    {
     case EnableOptions.enableCar:


           //method
           break;
     case EnableOptions.enableComputer:

          // methods
          break;

        etc... for all of your options

      default:

        //something
        break;

    }

}

答案 2 :(得分:0)

您还可以尝试在结尾处使用else if和一个else

    if (enableCar) {
        // do something
    }
    else if (enableComputer) {
        // do something
    }
    else if (enableTV) {
        // do something
    } else {
        otherChoice();
    }

答案 3 :(得分:0)

伪代码缺少很多信息。有时使用多态性可以避免级联if ... else。看一下this主题。并阅读有关replacing conditionals with polymorphism的文章。

答案 4 :(得分:0)

实际上,良好的结构分析是一种通用的方法,如何摆脱if-else语句,因为结构本身包含一些信息,你必须用你的if-else语句来决定。

所以你应该考虑你应该需要哪些课程以及他们有哪些责任和变种。你的例子太抽象了,所以我不能告诉你你应该做些什么。

例如 - 您应该考虑命令模式:http://www.oodesign.com/command-pattern.html

然后你可以使用“commad.do()”并且命令本身知道,该做什么,因为每个命令都有自己的功能。

答案 5 :(得分:-2)

您可以创建一个开关语句

if(enable)
{
    switch()
    {
         case enableCar:
         // do some code
         break;
         case enableComputer:
         //do some code
         break; 
    }
}