我正在尝试使用以下方法,但是IDE visual studio指出并非该方法中的所有代码都返回值。
我想知道错误在哪里。
代码:
private bool CheckDaysDiff(int daysDiff)
{
if (daysDiff < 0)
{
return false;
}
else if (daysDiff >= 1)
{
return true;
}
else if (daysDiff == 0)
{
return true;
}
}
答案 0 :(得分:4)
虽然您可能会对通过该方法的每个路径都返回一个值感到满意,但编译器并未进行该级别的分析。 IT部门不会考虑条件,因此只会看到:if (Something) else if (something else) else if (something else)
。就所关注的问题而言,它所看不到的是另一种情况,可以在不满足任何条件的情况下到达方法的结尾,从而不返回任何内容。
要解决此问题的方法就是:
private bool CheckDaysDiff(int daysDiff)
{
if (daysDiff < 0)
{
return false;
}
else
{
return true;
}
}
或者,如果您的代码未正确指示,则可以仅在语句末尾添加一些内容,以根据所需的行为返回或引发异常。如果您确信它永远都不会到达方法的末尾,那么异常可能是最合适的(因为如果到达那里,那么就发生了异常情况)。例如:
private bool CheckDaysDiff(int daysDiff)
{
if (daysDiff < 0)
{
return false;
}
else if (daysDiff >= 1)
{
return true;
}
else if (daysDiff == 0)
{
return true;
}
throw new Exception("Should never reach here.");
}
答案 1 :(得分:0)
您必须在其中插入带有return语句的else块。因为IDE需要知道如果dayDiff既不是<0或= 0也不是> = 1,则返回什么。
答案 2 :(得分:0)
实际上,可以使用ternary operator
将其简化为单行方法private bool CheckDaysDiff(int daysDiff)
{
return (daysDiff < 0) ? false : true;
}
就像其他人说的那样,IDE的问题是因为您的条件没有结尾else {}
,部分原因是因为条件过于复杂(不需要检查两个条件等于0的东西,如果两者都返回true,则等于或大于1的东西)。使用三元运算符既可以简化条件运算,又可以减轻IDE问题。
答案 3 :(得分:0)
您没有else
语句,这就是IDE这么说的原因...
代码更新:
private bool CheckDaysDiff(int daysDiff)
{
if (daysDiff >= 1)
{
return true;
}
else if (daysDiff == 0)
{
return true;
}
else {
return false;
}
}