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

我正在查看一个朋友的一些代码,并说他在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

  }

}


绝地无双
浏览 603回答 3
3回答

PIPIONE

通常是的。保证finally部分可以执行包括异常或return语句在内的所有操作。这个规则的一个例外是异步异常发生的线程(上OutOfMemoryException,StackOverflowException)。要了解有关那种情况下的异步异常和可靠代码的更多信息,请阅读受约束的执行区域。

慕尼黑的夜晚无繁华

这是一个小测试: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");        }    }}结果是:beforefinallyreturnafter
打开App,查看更多内容
随时随地看视频慕课网APP