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)说“并非所有代码路径都返回一个值”。为什么呢?
答案 0 :(得分:10)
编译器不会尝试确定这涵盖了n
的所有可能值。它只看到你有三个if
语句,它假设它们的所有都可能是假的...在这种情况下你会到达方法的末尾没有返回值。
有关编译器在可达性方面的限制的更多详细信息,请参阅this blog post from Eric Lippert。
让最后的回报无条件。
答案 1 :(得分:8)
编译器没有查看您的条件。即使你是正确的,你的至少一个if-block会运行,你仍然需要重构这样的事情:
if (n < 0)
return 1;
else if (n == 0)
return 2;
else
return 3;
答案 2 :(得分:2)
编译器不够聪明,不知道所有这些分支是互斥的,所以它担心所有三个if语句都失败的秋天案例。
您可以将所有if
语句与else
相关联,仅使用else
作为最后一个条件,也可以在结尾处返回默认值。这将解决问题。
答案 3 :(得分:1)
编译器不知道你已经覆盖了所有的基础。你可以像这样重写它......
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
}