1

我的代码看起来像这样:

if(condition1)
{
  //do some stuff
  if(condition2)
  {
   //do some other stuff
   if(condition3)
   {
       //do some more stuff
       if(condition4)
       { 
       //you probably got the point by now...
       }
   }
}

而且我想将其重新分解为看起来更好且更易于遵循的代码。
到目前为止,我得到的最好的是:

do{    
    if(!condition1){break;}
    //do some stuff
    if(!condition2){break;}
    //do some other stuff
    if(!condition3){break;}
    //do some more stuff
    if(!condition4){break;}
    //you probably got the point by now...

}while(false);   

我的问题是:
我还想念另一种更好的方法吗?

我认为这无关紧要,但我正在使用 C# ...

4

2 回答 2

3

可能将每个布尔条件所需的功能封装到一个方法中,并使用该方法而不是指定条件 1、条件 2、条件 3 等。

private boolean isRed() {
//do some stuff
}

private boolean isBlue() {
//do some other stuff
}

private boolean isGreen() {
//do some more stuff
}

...

if(isRed() && isBlue() && isGreen()) {
//do some more stuff
}
于 2013-07-17T18:14:17.660 回答
2

由于您使用的是 C#,因此可以进一步扩展 @dseibert 的想法并使用委托变得灵活,在本例中为Func。您可以创建一个包含Func的List并根据需要使用签名bool function(void)添加任意数量的函数,然后使用LINQ评估所有函数的结果。

三个示例函数:

private bool isRed()
{
    System.Console.WriteLine("red");
    return true;
}

private bool isBlue()
{
    System.Console.WriteLine("blue");
    return false;
}

private bool isGreen()
{
    System.Console.WriteLine("green");
    return true;
}

包含 Funcs 的列表,其中填充了测试函数和初始化结果:

var actions = new List<Func<bool>>();
actions.Add(() => isRed());
actions.Add(() => isGreen());
actions.Add(() => isBlue());
var result = true; // initial value

一次评估所有函数:

actions.ForEach(a => result &= a());
System.Console.WriteLine(result);

现在您唯一需要做的就是创建一个新方法并将其添加到列表中。

这种解决方案的缺点是即使结果已经是错误的,每个方法都会被调用,但是可以优化 ForEach 扩展方法中的代码。

于 2013-07-17T18:42:42.660 回答