繁体   English   中英

简化if-else表达式

[英]Simplify if-else expression

我尝试在if ... else管理一个3结果对话框,但是我发现它很难使用。 这是我的代码:

if (MessageBox.Show("Are you sure you want to exit", "", MessageBoxButtons.YesNoCancel) == DialogResult.Yes) {
   MessageBox.Show("Why?!", "", MessageBoxButtons.RetryCancel);
   Application.Restart();
} else if (MessageBox.Show("Are you sure you want to exit", "", MessageBoxButtons.YesNoCancel) == DialogResult.No) {
    if (MessageBox.Show("OK ^_^! Good Luck!", "", MessageBoxButtons.OK) == DialogResult.OK) 
        Application.Restart();
} else {
    if (MessageBox.Show("Are you sure you want to cancel?", "", MessageBoxButtons.OKCancel) == DialogResult.OK) {
        MessageBox.Show("Ok! Good Luck!");
        Application.Restart();
    } else {
        MessageBox.Show("Error!");
        Application.Restart();
    }
}

每当我运行它时,如果我按“否”或“取消”,它将打开一个新对话框。 我该如何避免呢?

您应该首先获取DialogResult ,然后在if-else语句中使用它:

DialogResult result = MessageBox.Show("Are you sure you want to exit", "", MessageBoxButtons.YesNoCancel);

if(result == DialogResult.Yes)
{
    //Code if Ok
}
else if(result == DialogResult.No)
{
    //Code if No
}
else
{
    //Code if Cancel
}

这样, MessageBox将仅打开一次

您的第一个if语句正在检查Yes的结果:

if (MessageBox.Show("Are you sure you want to exit", "", MessageBoxButtons.YesNoCancel) == DialogResult.Yes) 

如果用户选择“ No或“ Cancel ,则转到下一个生成另一个MessageBox if语句:

else if (MessageBox.Show("Are you sure you want to exit", "", MessageBoxButtons.YesNoCancel) == DialogResult.No) {

最后,如果用户选择“取消”,则会得到另一个MessageBox

else {
    if (MessageBox.Show("Are you sure you want to cancel?", "", MessageBoxButtons.OKCancel) == DialogResult.OK) 
     //Other code here...
     }

这就是为什么您看到多个MessageBox实例的原因。

因此,您应该只显示一个框,然后使用结果。 但是,该代码建议必须在某些实例上收集其他信息:

var result = MessageBox.Show("Are you sure you want to exit", "", MessageBoxButtons.YesNoCancel);
switch(result)
{
    case DialogResult.Yes:
        //Another box pops up to ask the user why
        MessageBox.Show("Why?!", "", MessageBoxButtons.RetryCancel);
        Application.Restart();
        break;
    case DialogResult.No:
        //Informational box
        MessageBox.Show("OK ^_^! Good Luck!", "", MessageBoxButtons.OK);
        Application.Restart();
    default:
        //Assume Cancel to be the default behavior, 
        //Pick any value to be the default. It's up to you.
        //Make sure they really, REALLY want to cancel
        if (MessageBox.Show("Are you sure you want to cancel?", "", MessageBoxButtons.OKCancel) == DialogResult.OK) 
        {
            MessageBox.Show("Ok! Good Luck!");
            Application.Restart();
        } 
        else 
        {
            MessageBox.Show("Error!");
            Application.Restart();
        }
}

我认为您的代码不应该调用Application.Restart 。在Cancel替代方法的false分支处重新启动,但是逻辑取决于您。

正如其他人指出的那样,请尝试正确缩进/格式化您的代码。 这将使您和其他人更容易理解。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM