繁体   English   中英

如何编写switch语句来测试DialogResult并提供直通逻辑

How to code a switch statement to test DialogResult and provide fall through logic

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

我在测试函数的返回值时遇到了奇怪的结果。 这段代码在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循环中。 第二个片段在被调用的函数内(该代码发出MessageBox.Show)。

2 个回复

你要做的就是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语句移动到下一个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);

编辑
而且,如果你想从你的交换机中突破循环,请看这个问题: 打破嵌套循环

这是循环吗? 这是我可以看到你使用'继续'之后的唯一原因。当然,通过堆叠案例选项,Yes和No将做同样的事情。 如果你希望'是'在开关执行后只是'掉落'

case DialogResult.Yes:
    break;
1 开关案例陈述中的分号

在附带声明中添加分号是否有任何意义? 我看到掉线效果符合预期,并且猜测分号被解释为空语句。 但是使用分号是否有利弊? 有推荐的某种最佳做法吗? 在下面的JavaScript示例中,请参阅第一个case语句中的分号。 我也想了解与上述C,C ++和Java有关的最佳实践。 我还看 ...

2 Switch声明似乎没有落空

我有这个基于simpleweather.js的代码块: 现在,switch语句似乎没有执行。 我没有完全充实它,因为我想在当前条件下测试它。 目前,莱昂的条件代码为“28”或多云。 但即使存在“28”的情况,switch语句也会默认为默认值。 任何想法为什么这样做? 如果您需要 ...

5 Java:我可以在 switch 语句中只遇到一种情况吗

在 Java 中,我可以只通过switch语句中的一种情况吗? 我明白,如果我break ,我将失败到switch语句的末尾。 这就是我的意思。 给定以下代码,在案例 2 上,我想执行案例 2 和案例 1。在案例 3 上,我想执行案例 3 和案例 1,但不执行案例 2。 ...

6 在Switch语句掉线后如何检查下一种情况?

在Swift中遇到fallthrough后,是否有任何方法可以检查下一个情况? 看起来这是编写简洁代码的好方法。 如果case是3:不必将case 1和case 2的代码添加到case 3我想激活第一个案例,第二个案例,然后是第三个案例。 我可以在每种情况下使用if-statemen ...

2015-08-17 03:49:42 2 275   ios/ swift
8 如何测试仅具有开关逻辑的功能?

我有一个Save()函数的代码,里面只有switch语句。 因此,基本上可以根据选择的平台进行节省。 但是我已经对UpdateGameState(),SaveForWeb()和SaveForX86()函数进行了测试。 由于单元测试规则说,如果您的函数中有逻辑,无论它多么简单,都必须测试该函 ...

9 德尔福在案例陈述中落空

在C中你可以做类似的事情 switch(x) { case 'a': case 'b': printf("something"); break; case 'c': printf("else"); break; } 而在Delphi我试过了两个 ...

2016-07-21 10:07:49 1 2712   delphi
暂无
暂无

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

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