c#中finally块中的Goto vs method
本文关键字:vs method Goto finally | 更新日期: 2023-09-27 18:15:45
我特别了解c#参考,并分析了为什么我不能在最后块中使用goto语句,但我想知道当我使用方法尝试同样的事情时,我终于能够离开最后块,但根据规范我不能。难道goto moo
和static void moo()
不是在做同样的事情,即把我带出最后一个街区吗??那么为什么在第一个的情况下它不工作,但在第二个的情况下工作顺利?
使用break、continue或goto语句将控制转移出finally块是编译时错误。当break、continue或goto语句出现在finally块中时,语句的目标必须在同一个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语句通常被认为是一种糟糕的编程实践,它会导致笨拙的程序。
是不是goto moo和静态void moo()做同样的行为,即把我从finally块?
不,绝对不。
goto moo
将控制完全转移到finally
块之外。
moo()
只是调用方法,但是当方法返回时,你又回到了finally
块。
如果你在你的moo()
方法后面放一个Console.WriteLine("Still here...")
,你会看到