为了账号安全,请及时绑定邮箱和手机立即绑定

如果我在Try块中返回值,那么Final语句中的代码会触发吗?

/ 猿问

如果我在Try块中返回值,那么Final语句中的代码会触发吗?

绝地无双 2019-09-21 15:06:31

我正在查看一个朋友的一些代码,并说他在try-finally块中使用了return语句。即使try块的其余部分没有触发,Finally部分中的代码是否仍会触发?


例:


public bool someMethod()

{

  try

  {

    return true;

    throw new Exception("test"); // doesn't seem to get executed

  }

  finally

  {

    //code in question

  }

}


查看完整描述

3 回答

?
慕婉清6462132

简单的答案:是的。


查看完整回答
反对 回复 2019-09-21
?
PIPIONE

通常是的。保证finally部分可以执行包括异常或return语句在内的所有操作。这个规则的一个例外是异步异常发生的线程(上OutOfMemoryException,StackOverflowException)。


要了解有关那种情况下的异步异常和可靠代码的更多信息,请阅读受约束的执行区域。


查看完整回答
反对 回复 2019-09-21
?
慕尼黑的夜晚无繁华

这是一个小测试:


class Class1

{

    [STAThread]

    static void Main(string[] args)

    {

        Console.WriteLine("before");

        Console.WriteLine(test());

        Console.WriteLine("after");

    }


    static string test()

    {

        try

        {

            return "return";

        }

        finally

        {

            Console.WriteLine("finally");

        }

    }

}

结果是:


before

finally

return

after


查看完整回答
反对 回复 2019-09-21

添加回答

回复

举报

0/150
提交
取消
意见反馈 邀请有奖 帮助中心 APP下载
官方微信