有没有办法让我的开关/案例落到C#的下一个案例中?

时间:2011-11-09 21:04:40

标签: c# switch-statement

我正在使用switch / case语句来处理已部署应用程序的某些更新。基本上,我想通过案例来执行从当前运行版本到最新版本的更新。

从Visual Studio对我大喊大叫,我了解到C#不允许进入下一个案例(正是我想要做的)。从this question开始,我学会了如何做我想做的事。但是,它仍然显然是一个错误。

我得到的是

switch (myCurrentVersion)
{
    case null:
    case "":
    case "0":
        UpdateToV1();
        goto case "1";
    case "1":
        UpdateToV2();
}

我在case "1":行上收到以下错误:

  

错误1控件不能从一个案例标签('case“1”:')转到另一个

我做错了吗?我怎么能强迫它掉下来?

4 个答案:

答案 0 :(得分:31)

即使是最后一种情况,您也需要添加break语句:

switch (myCurrentVersion)
{
    case null:
    case "":
    case "0":
        UpdateToV1();
        goto case "1";
    case "1":
        UpdateToV2();
        break;
}

答案 1 :(得分:25)

这是一个很好的例子,说明措辞不当的错误信息会造成混淆。这里实际违反的C#规则并不是控件从一个开关部分落到另一个开关部分;这是每个交换机部分的终点必须是不可达的。权利错误应该是

  

情况“1”的开关部分的端点必须不可到达;考虑添加'break;'

当我们重新审视Roslyn项目的switch语句的语义分析时,我会看看我们是否可以更改一下这一点的措辞,以便更清楚。

有关此问题和相关问题的更多分析,请参阅my article on the subject

答案 2 :(得分:4)

您的break分支中没有case "1"

答案 3 :(得分:3)

break;

之后加UpdateToV2();

你无法摆脱goto case "1",因为无论如何它会落到那里吗?