为什么无法控制留下最终陈述?

Mik*_*ter 44 c# try-catch

当我return在一个finally语句块中放置一个时,编译器会告诉我:

控制不能离开finally子句的主体

例:

try
{
}
catch
{
}
finally
{
    return;
}
Run Code Online (Sandbox Code Playgroud)

为什么是这样?

Ale*_*ill 74

考虑如果你return 1tryreturn 0内和finally块内部会发生什么......你的函数会试图返回两个值!控制流程的组合选项trycatch详尽无遗.

  • 适用于 Java /sf/ask/161697511/ (3认同)

Mar*_*zek 21

它是设计的,它在C#规范中描述:

这是一个编译时错误break,continue或者goto语句将控制转移出的finally块.当a break,continuegoto语句出现在finally块中时,语句的目标必须位于同一个finally块中,否则会发生编译时错误.

returnfinally块中发生语句是编译时错误.

另外,来自MSDN上的C#6.0规范草案:

returnfinally块中发生语句是编译时错误.