如果我在Try块中返回一个值,会在Finally语句中编写代码吗?

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

简单的回答:是的。


通常,是的。 finally节保证执行任何事情,包括异常或返回语句。 此规则的一个例外是线程上发生异步异常( OutOfMemoryExceptionStackOverflowException )。

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


这是一个小测试:

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
链接地址: http://www.djcxy.com/p/21123.html

上一篇: Will code in a Finally statement fire if I return a value in a Try block?

下一篇: Entity Framework Provider type could not be loaded?