我会得到奇怪的结果测试函数的返回值。此代码在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=0i=2, ,循环继续。案件 i=1 执行到 Console.Out.WriteLine(i);.

编辑
而且,如果您想从交换机内部突破循环,请参阅此问题: 突破嵌套环

其他提示

这是循环吗?这是我可以看到您使用“继续”之后的唯一原因。如果您想“是”,则在开关执行此操作之后才能“秋季”

case DialogResult.Yes:
    break;
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top