当我return在一个finally语句块中放置一个时,编译器会告诉我:
控制不能离开finally子句的主体
例:
try
{
}
catch
{
}
finally
{
return;
}
Run Code Online (Sandbox Code Playgroud)
为什么是这样?
Ale*_*ill 74
考虑如果你return 1在try块return 0内和finally块内部会发生什么......你的函数会试图返回两个值!控制流程的组合选项try和catch详尽无遗.
Mar*_*zek 21
它是设计的,它在C#规范中描述:
这是一个编译时错误
break,continue或者goto语句将控制转移出的finally块.当abreak,continue或goto语句出现在finally块中时,语句的目标必须位于同一个finally块中,否则会发生编译时错误.
return在finally块中发生语句是编译时错误.
另外,来自MSDN上的C#6.0规范草案:
return在finally块中发生语句是编译时错误.