Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/310.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何编写switch语句来测试DialogResult并提供直通逻辑_C#_Winforms_Switch Statement_Messagebox_Dialogresult - Fatal编程技术网

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

C# 如何编写switch语句来测试DialogResult并提供直通逻辑,c#,winforms,switch-statement,messagebox,dialogresult,C#,Winforms,Switch Statement,Messagebox,Dialogresult,我在测试函数的返回值时得到了奇怪的结果。此代码位于for循环中: DialogResult result = EvalReturnFromWS(returnMsg); switch (result) { case DialogResult.Yes: case DialogResult.No: continue; default: break; } 下面是

我在测试函数的返回值时得到了奇怪的结果。此代码位于for循环中:

DialogResult result = EvalReturnFromWS(returnMsg);
     switch (result)
     {
         case DialogResult.Yes:
         case DialogResult.No:
              continue;
         default:
              break;
     } 
下面是被调用函数的一个片段(在我的单元测试中,我总是单击“是”按钮):

当我单击“是”时,它返回DialogResult。是,但在调用代码中,执行流到第二种情况,即“否”,这将继续执行,这是我不打算执行的

在StackOverflow的其他地方,我看到一个线程建议编写一个类似DialogResult的“fall-through”案例

简而言之,如果是,我希望在切换案例结束后使用下一条语句继续执行。也就是说,“失败”


编辑-抱歉造成混淆。是的,最上面的代码段在for循环中。第二个代码段位于被调用函数(该代码发出MessageBox.Show)内。

您要做的是将
中断对话框result.Yes
案例中选择code>。你不希望在这种情况下失败

 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
 }
Fall-through意味着执行从一个
案例
语句移动到下一个。它与离开
开关的执行无关。在您的示例中,
break
default:
下,断开该代码块(开关,而不是循环),并在
switch
语句后继续执行。同样,它不会脱离外环。这是因为
break
是switch case中的关键字,用于停止进一步执行switch case块。但是,
继续将继续循环,因为它不是开关盒中使用的东西

尝试运行以下示例代码:

for (int i = 0; i < 3; i++) {
    switch (i) {
        case 0:
        case 2:
            continue;
        default:
            break;
    }
    Console.Out.WriteLine(i);
}
for(int i=0;i<3;i++){
开关(一){
案例0:
案例2:
继续;
违约:
打破
}
控制台输出写入线(i);
}
它将只输出
1
,因为对于
i=0
i=2
的情况,循环将继续。对于案例
i=1
执行使其进入
控制台.Out.WriteLine(i)

编辑

而且,如果您想从交换机内部跳出循环,请参见以下问题:

这是在循环中吗?这是我看到您在“否”之后使用“continue”的唯一原因。可以肯定的是,通过将case选项以“是”和“否”的方式堆叠,也可以实现同样的效果。如果您希望“是”只是在开关后“掉下来”,请执行此操作

case DialogResult.Yes:
    break;

为什么您的第二个代码段不能返回结果?或者至少,如果是或否或取消,
返回结果
?哼,我很困惑。在switch语句的上下文中,“跌入谷底”表示您“跌入”到下一个案例,而不是退出switch语句。在
switch
语句的上下文中,“跌入谷底”非常明确地表示“从一个
案例
到下一个案例”。如果您想表示“使用
开关之后的下一条语句继续执行”,您应该说“break”。请参阅问题编辑。。。第一个代码段位于for循环中。如果返回结果是正确的,我想通过。Yes@John高尔特:你能定义一下“坠落”是什么意思吗?我认为你没有在正确的上下文中使用它。Fall-through表示一个
案例
语句中的代码移到下一个案例中。它与离开
开关的执行无关。在您的示例中,
break
default:
下,断开该代码块(而不是循环),并在
switch
语句后继续执行。同样,它不会脱离外环。但是,
继续
将继续循环,因为它不是
开关中使用的关键字。
。此外,请参阅我的编辑,了解如何实际打破循环。@John Galt:我再次编辑了它,并给出了更全面的解释和示例。希望这能有所帮助。请参见问题的编辑…第一段代码在for循环中。我以为开关内部的断路器会断开for循环。也许你是说它只是从开关柜里出来的?
case DialogResult.Yes:
    break;