C# 开关故障未按预期工作

C# 开关故障未按预期工作,c#,switch-statement,C#,Switch Statement,我有一个开关块,它的行为不像我期望的那样。当我在这个论坛上浏览类似的问题时,答案并没有直接解决我的问题,但似乎证实了我的想法。请告诉我哪里出了问题。另外,我知道我可以用另一种可能更好的方式来完成这项工作,但这不是我想要的。我想知道我对失败的理解哪里是错误的 switch (ncPointType) { case "MSD": adjustDisabled = LastToken(initLine, adjustDisab

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

  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”,则应设置闭锁点。但是编译器在第一个“case”中标记错误“Control cannot fall through from case label('case“MSD”)。为什么此代码无效?

在C中,您必须明确地保留有问题的
case
部分。您可以在第一部分末尾使用
转到case“MSI”

当然,
开关
块的一部分也可以以
中断
返回
抛出
、无限循环(编译器可以确定无限循环)等结束。

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

当然,
开关
块的一部分也可以以
中断
返回
抛出
、无限循环(C编译器可以确定为无限循环)等结尾。

在C中,必须明确地保留有问题的
大小写部分。您可以使用
goto case“MSI”在第一节的末尾

当然,
开关
块的一部分也可以以
中断
返回
抛出
、无限循环(C编译器可以确定为无限循环)等结尾。

在C中,必须明确地保留有问题的
大小写部分。您可以使用
goto case“MSI”在第一节的末尾



当然,
开关
块的一部分也可以以
中断
返回
抛出
、无限循环(C#编译器可以确定是无限循环)等结束。

这可能会回答您的问题:错误消息的哪一部分不清楚?在C#@BenAaronson中不允许出现故障:那么为什么案例“MSI”的故障可以解决?@user3642601查看我在第二条评论中链接的问题的第一个答案您的错误在于认为案例MSI和BI是两个不同的开关部分,由一个空的开关盒体分隔。从MSI到BI之间没有“掉线”,因为它们是相同的部分,而不是两个不同的部分,它们之间是空的。这可能会回答您的问题:错误消息的哪一部分不清楚?在C#@BenAaronson中不允许出现故障:那么为什么案例“MSI”的故障可以解决?@user3642601查看我在第二条评论中链接的问题的第一个答案您的错误在于认为案例MSI和BI是两个不同的开关部分,由一个空的开关盒体分隔。从MSI到BI之间没有“掉线”,因为它们是相同的部分,而不是两个不同的部分,它们之间是空的。这可能会回答您的问题:错误消息的哪一部分不清楚?在C#@BenAaronson中不允许出现故障:那么为什么案例“MSI”的故障可以解决?@user3642601查看我在第二条评论中链接的问题的第一个答案您的错误在于认为案例MSI和BI是两个不同的开关部分,由一个空的开关盒体分隔。从MSI到BI之间没有“掉线”,因为它们是相同的部分,而不是两个不同的部分,它们之间是空的。这可能会回答您的问题:错误消息的哪一部分不清楚?在C#@BenAaronson中不允许出现故障:那么为什么案例“MSI”的故障可以解决?@user3642601查看我在第二条评论中链接的问题的第一个答案您的错误在于认为案例MSI和BI是两个不同的开关部分,由一个空的开关盒体分隔。从MSI到BI没有“失败”,因为它们是相同的部分,而不是两个不同的部分,它们之间是空的。感谢您阅读我的问题,因为其他一些答案显然没有。你的答案是可行的,但是为什么你需要在“MSD”的情况下使用goto而不是在“MSI”的情况下使用goto呢?我知道在“MSD”下有一个声明,但我认为在声明之后它会继续失败,不会有任何问题。这对我来说毫无意义。你应该读一读:尤其是以“一个开关段中允许有多个标签”开头的部分。@user3642601在C#中,一个
开关
段可以有多个标签。您的示例只有两个“部分”。“标签”
case“MSI”
case“BI”
属于同一部分。一个部分有多个标签不被视为失败。不允许漏掉。谢谢你阅读我的问题,因为其他一些答案显然没有。你的答案是可行的,但是为什么你需要在“MSD”的情况下使用goto而不是在“MSI”的情况下使用goto呢?我知道在“MSD”下有一个声明,但我认为在声明之后它会继续失败,不会有任何问题。这对我来说毫无意义。你应该读一读:尤其是以“一个开关段中允许有多个标签”开头的部分。@user3642601在C#中,一个
开关
段可以有多个标签。您的示例只有两个“部分”。“标签”
case“MSI”
case“BI”
属于同一部分。一个部分有多个标签不被视为失败。不允许漏掉。谢谢你阅读我的问题,因为其他一些答案显然没有。你的答案是可行的,但是为什么你需要在“MSD”的情况下使用goto而不是在“MSI”的情况下使用goto呢?我了解