我有时自己编写代码,需要将几层if / else语句合并到一起(例如,可以在下面找到)。
我想知道我是否可以将它缩短一点,因为有时候我有超过70行代码的if / else语句树,而且它们实际上只是填充方式太多而不是多少行看起来多余。
这是一个示例代码:
if (labelGiveTip1.Visible == true)
{
if (labelGiveTip2.Visible == true)
{
labelGiveTip3.Visible = true;
if (labelGiveTip3.Visible == true)
{
Custom_DialogBox.Show("All of your hints for this assignment is used, do you want annother assignmment?", //main text argument
"Error: No more hints", //header argument
"Back", //first button text argument
"Get a new assignment"); //second button text argument
//this is a custom dialog box
result = Custom_DialogBox.result;
switch (result)
{
case DialogResult.Yes:
buttonNextAssignment.PerformClick();
break;
case DialogResult.Cancel:
break;
default:
break;
}
}
}
else
{
labelGiveTip2.Visible = true;
}
}
else
{
labelGiveTip1.Visible = true;
}
答案 0 :(得分:3)
在我的代码中,我倾向于首先检查错误情况并尽快返回。多年来,这种方法帮助我减少了深层嵌套if else。除此之外,尝试将相关功能分离到不同的方法中。示例方法为一种方法提供了过多的逻辑。如果你有ReSharper,它表明了很好的改进,并且在一段时间内,它成为一种习惯。
答案 1 :(得分:2)
您可以检查条件的否定变体并使用else if
条件来避免那么多嵌套。例如。您的代码的简化版本:
if (!labelGiveTip1.Visible)
labelGiveTip1.Visible = true;
else if(!labelGiveTip2.Visible)
labelGiveTip2.Visible = true;
else
{
labelGiveTip3.Visible = true;
Custom_DialogBox.Show("All of your hints for this assignment is used, do you want annother assignmment?", //main text argument
"Error: No more hints", //header argument
"Back", //first button text argument
"Get a new assignment"); //second button text argument
//this is a custom dialog box
result = Custom_DialogBox.result;
switch (result)
{
case DialogResult.Yes:
{
buttonNextAssignment.PerformClick();
break;
}
case DialogResult.Cancel:
{
break;
}
default:
{
break;
}
}
}
当它们已经是布尔值时,也无需编写labelGiveTip1.Visible == true
或labelGiveTip1.Visible == false
。