C# - 转到switch语句中的goto会挂起

Nei*_*l P 1 c# c#-4.0

我正在使用gotoswitch语句的内部来模拟fall through行为.

我的switch语句使用a enum来确定要使用的是哪种情况.当包含该包含的情况goto被执行时,执行在该点挂起,并且托管进程开始使用更多的cpu.

我的代码如下所示:

switch (myEnum)
{
    case HostClass.EnumType.var1: goto case HostClass.EnumType.var2;
    case HostClass.EnumType.var2: myint = 3; break;
    default: break;
}
Run Code Online (Sandbox Code Playgroud)

为什么我的switch语句挂在goto上?在线阅读,这似乎是一种常见的模式.

删除goto修复它,但我不明白为什么.

sim*_*lds 9

你不需要goto.这样做:

switch (myEnum)
{
    case HostClass.EnumType.var1:
    case HostClass.EnumType.var2: 
        myint = 3; break;
    default: break;
}
Run Code Online (Sandbox Code Playgroud)

更新

OK,所以原因(我相信)它不工作是因为你需要一个地方goto.例如:

for(var i = 0; i < 100; i+=1)
{
    if(i == 50)
    {
        goto Outer;
    }
}

Outer:
Console.WriteLine("Done");
Run Code Online (Sandbox Code Playgroud)

这是一个非常人为的例子.

我不认为这解释了为什么你的代码会挂起.我唯一能想到的goto是等待地址?

正如NeilP的评论中所提到的,你只能依赖空案例陈述.这仍然无法解释为什么你的代码挂起'goto'.它不应该.

  • @NeilP你只能通过空案例陈述.这仍然无法解释为什么你的代码挂起'goto'.它不应该. (3认同)
  • "删除goto修复它,但我不明白为什么." (2认同)