如何编码开关语句以测试Dialogresult并通过逻辑提供掉落
-
26-10-2019 - |
题
我会得到奇怪的结果测试函数的返回值。此代码在for循环中:
DialogResult result = EvalReturnFromWS(returnMsg);
switch (result)
{
case DialogResult.Yes:
case DialogResult.No:
continue;
default:
break;
}
这是来自称为函数的片段(在我的设备测试中,我总是单击“是”按钮):
DialogResult result = MessageBox.Show(mbText.ToString(), caption, button, icon);
switch (result)
{
case DialogResult.Yes:
return DialogResult.Yes;
case DialogResult.No:
return DialogResult.No;
case DialogResult.Cancel:
return DialogResult.Cancel;
}
当我单击“是”时,它会返回dialogresult.yes,但回到呼叫代码中,执行流向第二个情况,即“否”,这确实是我不打算的继续操作。
在Stackoverflow上的其他地方,我看到了一个线程,该线程暗示了对Dialogresult的编码“秋季直通”案例的编码。
简而言之,如果是,我想在开关案例结束后恢复执行下一个语句。也就是说,“跌倒”。
编辑 - 对不起。是的,顶部片段在for循环中。第二个摘要在调用函数内部(该代码essoess MessageBox.Show)。
解决方案
你想做的就是放 break;
在里面 DialogResult.Yes
案子。在这种情况下,您不希望它能通过。
switch (result)
{
case DialogResult.Yes:
break; //Leaves the switch statement and continues executing code
case DialogResult.No:
continue; //Moves to next iteration of loop
default:
break; //Leaves the switch statement and continues executing code
}
跌落意味着执行从一个移动 case
向下一个声明。这与执行无关 switch
陈述。在您的示例中, break;
在下面 default:
, ,从该代码的块中删除(开关,而不是循环),并在此之后继续执行 switch
陈述。同样,它不会突破外循环。这是因为 break;
是开关案例中停止进一步执行开关情况块的关键字。然而, continue;
将继续循环,因为它不在开关情况下使用。
尝试运行此示例代码:
for (int i = 0; i < 3; i++) {
switch (i) {
case 0:
case 2:
continue;
default:
break;
}
Console.Out.WriteLine(i);
}
它只会输出 1
因为对于情况 i=0
和 i=2
, ,循环继续。案件 i=1
执行到 Console.Out.WriteLine(i);
.
编辑
而且,如果您想从交换机内部突破循环,请参阅此问题: 突破嵌套环
其他提示
这是循环吗?这是我可以看到您使用“继续”之后的唯一原因。如果您想“是”,则在开关执行此操作之后才能“秋季”
case DialogResult.Yes:
break;
不隶属于 StackOverflow