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;
}
更新
好的,所以(我相信)它不起作用的原因是因为你需要一个 place 到 goto
。例如:
for(var i = 0; i < 100; i+=1)
{
if(i == 50)
{
goto Outer;
}
}
Outer:
Console.WriteLine("Done");
这是一个非常人为的例子。
我认为这不能解释您的代码挂起的原因。我唯一能想到的是 goto
正在等待地址?
正如 NeilP 在评论中提到的,您只能在空的案例陈述中失败。这仍然不能解释为什么您的代码挂在 'goto' 上。不应该。
我在 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;
}
更新
好的,所以(我相信)它不起作用的原因是因为你需要一个 place 到 goto
。例如:
for(var i = 0; i < 100; i+=1)
{
if(i == 50)
{
goto Outer;
}
}
Outer:
Console.WriteLine("Done");
这是一个非常人为的例子。
我认为这不能解释您的代码挂起的原因。我唯一能想到的是 goto
正在等待地址?
正如 NeilP 在评论中提到的,您只能在空的案例陈述中失败。这仍然不能解释为什么您的代码挂在 'goto' 上。不应该。