我的代码看起来像这样:
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#...
答案 0 :(得分:2)
可能将每个布尔条件所需的功能封装到方法中,并使用该方法而不是指定condition1,condition2,condition3等。
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
}
答案 1 :(得分:1)
由于您使用的是C#,因此@dseibert的概念可以进一步扩展,并使用委托变得灵活,在本例中为Func。 您可以创建一个List来保存Func并根据需要添加带有签名 bool函数(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扩展方法中的代码。