Joh*_*ams 3 c# messagebox switch-statement dialogresult winforms
我在测试函数的返回值时遇到了奇怪的结果.这段代码在for循环中:
DialogResult result = EvalReturnFromWS(returnMsg);
switch (result)
{
case DialogResult.Yes:
case DialogResult.No:
continue;
default:
break;
}
Run Code Online (Sandbox Code Playgroud)
这是来自被调用函数的片段(在我的单元测试中,我总是单击"是"按钮):
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;
}
Run Code Online (Sandbox Code Playgroud)
当我单击"是"时它返回DialogResult.Yes但返回调用代码,执行流程到第二个案例,这是"否",这是一个继续,这是我不打算.
在StackOverflow的其他地方,我看到一个线程,暗示编写一个"落地"案例,就像我对DialogResult一样.是的.
简而言之,如果是,我想在切换案例结束后用下一个语句恢复执行.也就是说,"堕落".
编辑 - 抱歉混淆.是的,顶部片段在for循环中.第二个片段在被调用的函数内(该代码发出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
}
Run Code Online (Sandbox Code Playgroud)
堕落意味着执行从一个case语句移动到下一个语句.它与离开switch声明的执行无关.在您的示例中,break;under default:,中断了该代码块(交换机,而不是循环)并在switch语句后继续执行.同样,它不会突破外循环.这是因为break;切换案例中的关键字是停止进一步执行switch case块的.但是,continue;将继续循环,因为它不是在开关案例中使用的东西.
尝试运行此示例代码:
for (int i = 0; i < 3; i++) {
switch (i) {
case 0:
case 2:
continue;
default:
break;
}
Console.Out.WriteLine(i);
}
Run Code Online (Sandbox Code Playgroud)
它只会输出1,因为案件i=0和i=2,继续循环.案件i=1执行使其成为Console.Out.WriteLine(i);.
编辑
并且,如果你想从你的交换机中突破循环,请看到这个问题:打破嵌套循环
| 归档时间: |
|
| 查看次数: |
3226 次 |
| 最近记录: |