[英]Why can't control leave a finally statement?
当我在finally
语句的块中放置return
,编译器告诉我:
控制不能离开 finally 子句的主体
例子:
try
{
}
catch
{
}
finally
{
return;
}
为什么是这样?
考虑一下如果您在try
块中return 1
并在finally
块中return 0
会发生什么......您的函数将尝试返回两个值! try
和catch
的组合选项在控制流方面是详尽无遗的。
这是设计使然,并在 C# 规范中进行了描述:
break
、continue
或goto
语句将控制权转移出finally
块是编译时错误。 当在finally
块中出现break
、continue
或goto
语句时,该语句的目标必须在同一个finally
块内,否则会发生编译时错误。
return
语句出现在finally
块中是编译时错误。
此外,来自MSDN 上的 C# 6.0 规范草案:
return
语句出现在finally
块中是编译时错误。
当前的答案解释了为什么这会发生得很好,但我也认为重要的是要注意在不涉及返回值的情况下绕过这个约束是多么容易,并且finally
子句是方法中的最后一件事(经常发生) :
try {}
catch {}
finally
{
FinallyMethod();
}
然后在FinallyMethod
您可以FinallyMethod
地使用return
语句
void FinallyMethod()
{
//...
if (x == y)
return;
else
a = b;
//etc.
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.