try
{...
block:
....
}
catch{ ..}
GOTO block
...
....
finally{...}
这种情况下,goto会执行吗?
GOTO block
' 而不是 'goto block;
',即使语法正确也无法编译通过,因为 C# 规范 (§8.9.3) 规定:goto 语句的标签是具有给定名称的标记语句。如果当前函数成员中不存在具有给定名称的标记,或者 goto 语句不在标记的范围内,则会发生编译时错误。此规则允许使用 goto 语句将控件从嵌套作用域转移出来,但不能转移到嵌套作用域内部。try
{
...
goto Label1;
}
finally
{
CloseAll();
}
Label1:
MethodB();
在实际转移控制并执行MethodB()
之前,它将调用CloseAll()
。
听起来很合理,但我从未想过...
编号块:标签必须放在try的外面,以便goto能够看到它。代码甚至无法编译。你是在参加测试吗?