我正在使用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”:')转到另一个
我做错了吗?我怎么能强迫它掉下来?
答案 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"
,因为无论如何它会落到那里吗?