在什么情况下获胜;这个函数是否返回一个值?编译器为什么报告错误
本文关键字:一个 编译器 错误 报告 为什么 获胜 情况下 函数 返回 是否 在什么 | 更新日期: 2023-09-27 18:00:47
public static int Test(int n)
{
if (n < 0) return 1;
if (n == 0) return 2;
if (n > 0) return 3;
}
编译器(Visual Studio 2010,C#4.0(表示"并非所有代码路径都返回值"。为什么?
编译器不会试图确定这涵盖了n
的所有可能值。它所看到的只是你有三个if
语句,并且它假设所有都有可能是false。。。在这种情况下,您将在不返回值的情况下到达方法的末尾。
请参阅Eric Lippert的这篇博客文章,了解有关编译器可达性限制的更多详细信息。
最后无条件退货即可。
编译器没有查看您的条件。即使你认为至少有一个if块会运行是正确的,你仍然需要重构到这样的东西:
if (n < 0)
return 1;
else if (n == 0)
return 2;
else
return 3;
编译器不够聪明,无法知道所有这些分支都是互斥的,因此它担心三个if语句都会失败。
您可以将所有if
语句与else
链接,并仅将else
用于最后一个条件,也可以在末尾返回默认值。这将绕过这个问题。
编译器不知道您已经覆盖了所有的基础。你可以这样重写。。。
public static int Test(int n)
{
if (n < 0) return 1;
else if (n == 0) return 2;
else (n > 0) return 3;
}
或者这个。。。
public static int Test(int n)
{
if (n < 0) return 1;
if (n == 0) return 2;
if (n > 0) return 3;
return 4; //will never occur
}