c#中finally块中的Goto vs method

本文关键字:vs method Goto finally | 更新日期: 2023-09-27 18:15:45

我特别了解c#参考,并分析了为什么我不能在最后块中使用goto语句,但我想知道当我使用方法尝试同样的事情时,我终于能够离开最后块,但根据规范我不能。难道goto moostatic 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语句通常被认为是一种糟糕的编程实践,它会导致笨拙的程序。

c#中finally块中的Goto vs method

是不是goto moo和静态void moo()做同样的行为,即把我从finally块?

不,绝对不。

goto moo将控制完全转移到finally块之外。

moo()只是调用方法,但是当方法返回时,你又回到了finally块。

如果你在你的moo()方法后面放一个Console.WriteLine("Still here..."),你会看到