【发布时间】:2012-04-24 05:58:44
【问题描述】:
为什么在下面的代码中,.NET 编译器无法确定所有代码路径都返回值?
bool Test(bool param) {
bool test = true;
if (param)
test = false;
else
test = false;
if (!test)
return false;
}
错误 CS0161:并非所有代码路径都返回值!
代码可以重构——但编译器不建议这样做。然而所有的返回路径都被覆盖了——那么为什么编译器会抱怨它们没有呢?
编辑:我猜这里的结论是:
(error CS0161) + (all code paths obviously return a value) => refactor code.
一旦你养成了翻译的习惯,我想一切都会好的。
【问题讨论】:
-
我猜开发人员觉得没有必要满足这样的代码。
-
是否存在您看到此编译器错误的有用代码的实际 sn-p?
-
但它仍然可以通过简单的重构来消除冗余。然后我怀疑它不会再触发错误。可以将其视为关注good design practice 的微妙推动。
-
这个函数在它的当前状态是没用的,因为
if (!test) return false应该只是return false。我没有看到任何价值试图理解为什么一个无用的函数会引发警告/错误。 -
回应您的编辑:dtb 的回答是正确的。 Eric Lippert 的文章不仅说“可达性分析器不是很聪明”,而且还说“语言设计的这个缺点很愚蠢,但坦率地说,我们比修复这个愚蠢的情况有更高的优先级。”这里的解决方案不是修复编译器;相反,它是删除
if (!power_args_ok)行。或者,您可以发送new Exception("power_args_ok is unexpectedly true")以保护自己免受对该方法的错误编辑。
标签: c# compiler-construction compiler-errors