是否有一种方法可以使我的切换/案例通过c#中的下一个案例

本文关键字:案例 下一个 我的 可以使 方法 一种 是否 | 更新日期: 2023-09-27 18:14:15

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

从Visual Studio对我大喊大叫中,我了解到c#不允许掉到下一个case(这正是我想做的)。从这个问题中,我学会了如何去做我想做的事情。然而,这显然仍然是一个错误。

我得到的是

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

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

错误1控制无法从一个case标签('case "1":')切换到另一个

我做错了什么吗?我怎样才能让它落空呢?

是否有一种方法可以使我的切换/案例通过c#中的下一个案例

您需要添加一个break语句,即使它是最后一个case:

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

这是一个很好的例子,说明措辞糟糕的错误消息是如何造成混乱的。这里真正违反的c#规则并不是控制从一个开关部分掉到另一个开关部分;即每个交换机段的端点必须不可达。按照规定,错误应该是类似

这样的内容。

情况"1"的开关段端点必须不可达;考虑添加'break;'

当我们重新审视Roslyn项目的switch语句的语义分析时,我会看看我们是否可以稍微改变一下这方面的措辞,使其更清楚。

有关此问题和相关问题的更多分析,请参阅我关于该主题的文章。

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

UpdateToV2();后面放一个break;

你不能摆脱goto case "1",因为它无论如何都会掉下去?