错误:并非所有代码路径都返回值

时间:2012-11-28 21:12:33

标签: c#

public Boolean DetectPlayerAndGround1Collision2(/*snip*/)
{            
    if (/*snip*/)
    {   
        if (/*snip*/) { return true; }
        else if (/*snip*/) { return true; }
        else if ((/*snip*/) { return true; }
    }
}

5 个答案:

答案 0 :(得分:5)

您在else案例中未能返回值:

public Boolean DetectPlayerAndGround1Collision2(/*snip*/)
{            
    if (/*snip*/)
    {   
        if (/*snip*/) { return true; }
        else if (/*snip*/) { return true; }
        else if ((/*snip*/) { return true; }
        else{return false;}
    }
    else
    {
       return false;
    }
}

答案 1 :(得分:3)

我建议您执行以下操作:

public Boolean DetectPlayerAndGround1Collision2(/*snip*/)
{
    bool result = false;            
    if (/*snip*/)
    {   
        if (/*snip*/) { result = true; }
        else if (/*snip*/) { result = true; }
        else if (/*snip*/) { result =true; }
    }
    return result;
}

使用单个return语句可以更简单地跟踪正在发生的事情,并确保它不在任何条件语句之外,并在声明时初始化,确保您始终返回值。

答案 2 :(得分:3)

以下内容:

if (A)
{   
    if (B) { return true; }
    else if (C) { return true; }
    else if (D) { return true; }
}

相当于:

return A && (B || C || D);

(假设以前没有返回任何值的任何情况意味着返回false。)

答案 3 :(得分:2)

如果没有else作为其余条件的全部内容,则需要在逻辑检查后添加return false;

public Boolean DetectPlayerAndGround1Collision2(/*snip*/)
{            
    if (/*snip*/)
    {   
        if (/*snip*/) { return true; }
        else if (/*snip*/) { return true; }
        else if (/*snip*/) { return true; }
    }
    return false; 
}

答案 4 :(得分:2)

您并不总是返回值:

    if (playerPositionM.Y <= groundPositionM.Y + groundM.Height && playerPositionM.Y > groundPositionM.Y)
    {   
        if (playerPositionM.X < groundPositionM.X && (playerPositionM.X + playerM.Width < groundPositionM.X + groundM.Width && playerPositionM.X + playerM.Width > groundPositionM.X)) 
        { 
            return true; 
        }
        else if (playerPositionM.X + playerM.Width > groundPositionM.X + groundM.Width && (playerPositionM.X < groundPositionM.X + groundM.Width && playerPositionM.X > groundPositionM.X))
        { 
            return true; 
        }
        else if ((playerPositionM.X > groundPositionM.X && playerPositionM.X < groundPositionM.X + groundM.Width) && (playerPositionM.X + playerM.Width < groundPositionM.X + groundM.Width && playerPositionM.X + playerM.Width > groundPositionM.X)) 
        { 
            return true; 
        }
        else
        {
            // You need to return a value here:
        }
    }
    else
    {
        // You need to return a value here:
    }

etc!