C# - switch 语句内的 goto 挂起

C# - goto inside a switch statement hangs

我在 switch 语句中使用 goto 来模拟掉落行为。

我的 switch 语句使用 enum 来确定使用哪种情况。 当执行包含 goto 的案例时,执行会在此时挂起,并且托管进程开始使用更多 cpu.

我的代码如下所示:

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

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

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

您不需要 goto。只需这样做:

switch (myEnum)
{
    case HostClass.EnumType.var1:
    case HostClass.EnumType.var2: 
        myint = 3; break;
    default: break;
}

更新

好的,所以(我相信)它不起作用的原因是因为你需要一个 placegoto。例如:

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

Outer:
Console.WriteLine("Done");

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

我认为这不能解释您的代码挂起的原因。我唯一能想到的是 goto 正在等待地址?

正如 NeilP 在评论中提到的,您只能在空的案例陈述中失败。这仍然不能解释为什么您的代码挂在 'goto' 上。不应该。