是否有更简单的方法将几个if / else语句写入彼此?

时间:2015-04-25 09:23:11

标签: c# .net if-statement

我有时自己编写代码,需要将几层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;
}

2 个答案:

答案 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 == truelabelGiveTip1.Visible == false