在什么情况下这个函数不会返回值?为什么编译器报告错误?

Iva*_*van 5 .net c# if-statement return

public static int Test(int n)
{
  if (n < 0) return 1;
  if (n == 0) return 2;
  if (n > 0) return 3;
}
Run Code Online (Sandbox Code Playgroud)

编译器(Visual Studio 2010,C#4.0)说"并非所有代码路径都返回值".为什么?

Jon*_*eet 10

编译器不会尝试确定这涵盖了所有可能的值n.所有它看到的是,你有三个if语句,它假定有可能为所有他们是假的......在这种情况下你会到达方法末尾,没有返回值.

有关编译器在可达性方面的限制的详细信息,请参阅Eric Lippert的这篇博文.

只是让最终的回报无条件.


Fis*_*rdo 8

编译器没有查看您的条件.即使你是正确的,至少有一个你的if块会运行,你仍然需要重构这样的事情:

if (n < 0)
    return 1;
else if (n == 0)
    return 2;
else
    return 3;
Run Code Online (Sandbox Code Playgroud)