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

时间:2015-07-16 14:01:47

标签: c# c#-4.0

我在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会修复它,但我不明白为什么。

1 个答案:

答案 0 :(得分:9)

您不需要goto。就这样做:

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

<强>更新

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

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

Outer:
Console.WriteLine("Done");

这是非常设计的例子。

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

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