关于c#:切换失败不按预期工作

Switch Fall Through Not Working as Expected

本问题已经有最佳答案,请猛点这里访问。

我有一个开关块,它的行为并不像我预期的那样。正如我在这个论坛上浏览过类似的问题,答案并没有直接解决我的问题,但似乎证实了我的想法。请告诉我哪里出错了。另外,我知道我可以用另一种更好的方式来完成这一任务,但这不是我想要的。我想知道我对失败的理解在哪里是错误的。

1
2
3
4
5
6
7
8
  switch (ncPointType)
        {
            case"MSD":
                adjustDisabled = LastToken(initLine, adjustDisabled);//fall through intentional
            case"MSI":
            case"BI":
                latchingPoint = FirstToken(initLine, latchingPoint);
                break;

现在,根据我的理解,如果ncpointtype=="msd",则应设置adjustDisabled和latchingpoint。如果"msi",则应设置latchingpoint。但是编译器将第一个"case"标记为错误"control cannot fall through from one case label(‘case"msd":’)to another.为什么此代码无效?


在c中,您必须明确保留有问题的case部分。您可以在第一节的末尾使用goto case"MSI";

当然,switch块的一部分也可以以breakreturnthrow、无限循环(C编译器可以确定的是无限循环)等结束。