C# 简化if-else表达式
我正在尝试管理一个3结果对话框,如果。。。除此之外,我发现它很难使用。这是我的代码:C# 简化if-else表达式,c#,C#,我正在尝试管理一个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.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
}
这样,消息框只会打开一次,如果您的第一条if语句正在检查Yes的结果:
如果用户选择“否”或“取消”,则转到下一条If语句,该语句将生成另一个MessageBox:
最后,如果用户选择“取消”,您将获得另一个MessageBox:
这就是为什么会看到多个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();
}
}
我认为您的代码不应该调用应用程序。请在Cancel选项的false分支重新启动,但逻辑取决于您
正如其他人所指出的,请尝试正确地缩进/格式化代码。这将使您和其他人更容易理解。您应该在代码中缩进至少四个空格,以使其格式正确。类似于codereview.stackexchange.com分配MessageBox的结果。显示一个变量,并在if语句中选中该变量。使用调试器。@如果语句是一种编码样式,MichaWiedenmann将省略单个语句周围的花括号。除非括号内的语法有错误,否则您提到的if语句仍然可以编译。@MichaWiedenmann:怎么会这样?根据OP的问题:每当我运行它时,如果我按“否”或“取消”,它就会打开一个新对话框。我怎样才能避免呢?确实如此。非常感谢@MaxGrip很高兴这对你有帮助。请接受答案
else if (MessageBox.Show("Are you sure you want to exit", "", MessageBoxButtons.YesNoCancel) == DialogResult.No) {
else {
if (MessageBox.Show("Are you sure you want to cancel?", "", MessageBoxButtons.OKCancel) == DialogResult.OK)
//Other code here...
}
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();
}
}