我正在使用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修复它,但我不明白为什么.
你不需要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'.它不应该.