我特别知道C# Reference,并分析了为什么我不能在finally块中使用goto语句,但是我想知道当我使用方法尝试同样的事情时,我终于可以离开最后的块,但根据规范我不能。是不是goto moo
和static void moo()
做同样的行为,即带我离开最后阻止?那么为什么在第一次的情况下,它不工作,但在第二案件工作顺利?goto vs方法在finally块中c#
对于break,continue或goto语句将控制权转移出finally块是编译时错误。当finally块中发生break,continue或goto语句时,语句的目标必须位于finally块内,否则会发生编译时错误。
对于在finally块中发生的return语句,这是一个编译时错误。
第一个案例与Goto语句。
static void Main(string[] args)
{
try{}
catch (Exception ex){}
finally
{
goto moo;
}
moo:
Console.Write("Hello");
}
第二种情况与方法:它的工作!
static void Main(string[] args)
{
try{}
catch{}
finally
{
moo();
}
}
static void moo()
{
int x=2, y=3, a=4, b=7;
if (x == y)
return;
else
a = b;
}
是否有*任何*你想使用'goto'的好理由?这两个片段没有共同之处。第二个调用方法。第一次尝试以不受控制的方式突破异常终结器 –
您究竟想要实现什么?你将无需转到Console.Write。 – PaulF
根据C#规范,请参阅[接受的答案](http://stackoverflow.com/questions/1952306/goto-statement-in-c-net)“goto语句不能退出finally块(§8.10) 。当goto语句出现在finally块中时,goto语句的目标必须位于最后一个块中,否则会发生编译时错误。“ [规范在这里](https://msdn.microsoft.com/en-us/library/aa664758(v = vs.71).aspx),关于此的段落在底部附近。 – Equalsk