1

这很奇怪,因为据我所知,该方法确实返回了一个值或 null ......我之前用 null 运行过它并且它工作......自从我在 if 语句中输入这两个 if 语句以来,我收到错误“并非所有代码路径都有返回值”

    if (dt.Rows.Count != 0)
    {

        if (dt.Rows[0]["ReportID"].ToString().Length > 40)
        {

        string ReportID = dt.Rows[0]["ReportID"].ToString().Substring(0, 36);
        string ReportIDNumtwo = dt.Rows[0]["ReportID"].ToString().Substring(36, 36);
        MyGlobals1.versionDisplayTesting = ReportID;
        MyGlobals1.secondversionDisplayTesting = ReportIDNumtwo;
        return ReportID;

        }

        else if (dt.Rows[0]["ReportID"].ToString().Length < 39)
        {
            string ReportID = dt.Rows[0]["ReportID"].ToString();
            MyGlobals1.versionDisplayTesting = ReportID;
            return ReportID;
         }
    }
    else
    {
        return null;
    }
}
4

7 回答 7

9
if (dt.Rows.Count != 0)
{
    ...

    else if (dt.Rows[0]["ReportID"].ToString().Length < 39)
    {
        string ReportID = dt.Rows[0]["ReportID"].ToString();
        MyGlobals1.versionDisplayTesting = ReportID;
        return ReportID;
     }

    // it's possible to get here without returning anything
}
else
{
    return null;
}

所以你应该做这样的事情:

if (dt.Rows.Count != 0)
{
    ...

    else if (dt.Rows[0]["ReportID"].ToString().Length < 39)
    {
        string ReportID = dt.Rows[0]["ReportID"].ToString();
        MyGlobals1.versionDisplayTesting = ReportID;
        return ReportID;
     }
}

return null;
于 2012-06-21T19:28:42.303 回答
4

里面第一个if,当两个条件都是false。例如,如果行数是 40。

于 2012-06-21T19:28:41.070 回答
2

else在内部if声明中缺少一个

于 2012-06-21T19:28:41.770 回答
1

如果您删除最后的else声明并保留return null;它应该消失。如果它到达一个内部if语句,它会返回一些东西,但如果它到达末尾,它将无法返回任何东西。

if (dt.Rows.Count != 0){
    if (dt.Rows[0]["ReportID"].ToString().Length > 40)
    {
        string ReportID = dt.Rows[0]["ReportID"].ToString().Substring(0, 36);
        string ReportIDNumtwo = dt.Rows[0]["ReportID"].ToString().Substring(36, 36);
        MyGlobals1.versionDisplayTesting = ReportID;
        MyGlobals1.secondversionDisplayTesting = ReportIDNumtwo;
        return ReportID;
    }
    else if (dt.Rows[0]["ReportID"].ToString().Length < 39){
        string ReportID = dt.Rows[0]["ReportID"].ToString();
        MyGlobals1.versionDisplayTesting = ReportID;
        return ReportID;
    }
}
// If gets into if statement, but does not match inner conditional statements, it will end up here, if it were an else statement, return null will not get called, and a return will not be done
return null;
于 2012-06-21T19:29:41.953 回答
1

dt.Rows[0]["ReportID"].ToString().Length == 39当或时没有返回值dt.Rows[0]["ReportID"].ToString().Length == 40

于 2012-06-21T19:30:21.100 回答
1

我会这样做:

string ReportID = null;

if (dt.Rows.Count != 0)
{

    if (dt.Rows[0]["ReportID"].ToString().Length > 40)
    {

    ReportID = dt.Rows[0]["ReportID"].ToString().Substring(0, 36);
    string ReportIDNumtwo = dt.Rows[0]["ReportID"].ToString().Substring(36, 36);
    MyGlobals1.versionDisplayTesting = ReportID;
    MyGlobals1.secondversionDisplayTesting = ReportIDNumtwo;

    }

    else if (dt.Rows[0]["ReportID"].ToString().Length < 39)
    {
        ReportID = dt.Rows[0]["ReportID"].ToString();
        MyGlobals1.versionDisplayTesting = ReportID;
     }
}

return ReportID;

原因:代码少,一个返回点。

于 2012-06-21T21:51:28.090 回答
0

else之后你还需要一个else if

  if (dt.Rows.Count != 0)
    {

        if (dt.Rows[0]["ReportID"].ToString().Length > 40)
        {

        string ReportID = dt.Rows[0]["ReportID"].ToString().Substring(0, 36);
        string ReportIDNumtwo = dt.Rows[0]["ReportID"].ToString().Substring(36, 36);
        MyGlobals1.versionDisplayTesting = ReportID;
        MyGlobals1.secondversionDisplayTesting = ReportIDNumtwo;
        return ReportID;

        }

        else if (dt.Rows[0]["ReportID"].ToString().Length < 39)
        {
            string ReportID = dt.Rows[0]["ReportID"].ToString();
            MyGlobals1.versionDisplayTesting = ReportID;
            return ReportID;
        }
        else
        {
            return null /* or something */
        }
    }
    else
    {
        return null;
    }
}
于 2012-06-21T19:30:08.760 回答