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

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

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

我得到的是

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

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

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

难道我做错了什么? 我怎么能强迫它掉下来?

你需要添加一个break语句,即使它是最后一种情况:

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

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

情况“1”的开关部分的端点不得到达; 考虑添加’break;’

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

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

您的case "1"分支没有break

break;UpdateToV2();

你不能摆脱goto case "1"因为它会落到那个吗?