如果我在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节保证执行任何事情,包括异常或返回语句。 此规则的一个例外是线程上发生异步异常( 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");
}
}
}
结果是:
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?