该方法不接受返回语句

时间:2019-01-19 21:31:30

标签: c#

我正在尝试使用以下方法,但是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;
    }
}

4 个答案:

答案 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;
        }
    }