并非所有代码路径都返回值Error

时间:2012-08-23 09:06:01

标签: c# asp.net

我的CS文件出现编译错误。我有一个方法可以创建用户凭据的JSON对象。

public string CreateLoginjson(string strErrorType, bool blIsAuthenticated)
        {

            StringBuilder sbLoginJson = new StringBuilder();
            if (blIsAuthenticated)
            {
                sbLoginJson.Append("{LoginSuccess:1");
            }
            else
            {
                sbLoginJson.Append("{LoginSuccess:0");
            }

            if (strErrorType != string.Empty)
            {
                if (strErrorType.TrimEnd(new char[] { ',' }) == "Token" || strErrorType.TrimEnd(new char[] { ',' }) == "BlankToken")
                {
                    sbLoginJson.Append(",txtTestTokenNumber1:\"Error\"");
                    sbLoginJson.Append(",txtTestTokenNumber2:\"Error\"");
                    sbLoginJson.Append(",txtTestTokenNumber3:\"Error\"");
                    sbLoginJson.Append(",txtTestTokenNumber4:\"Error\"");

                }


                if (strErrorType.TrimEnd(new char[] { ',' }) == "Password" || strErrorType.TrimEnd(new char[] { ',' }) == "BlankPassword")
                {
                    sbLoginJson.Append(",txtPassword:\"Error\"");

                }

                if (strErrorType.TrimEnd(new char[] { ',' }) == "UserName" || strErrorType.TrimEnd(new char[] { ',' }) == "BlankUserName")
                {
                    {
                        sbLoginJson.Append(",UserName:\"Error\"");

                    }
                    string strLoadErrorControlMessage = LoadErrorControl(strErrorType, string.Empty);

                    if (strLoadErrorControlMessage != string.Empty)
                    {
                        PageTestApplicationLogin objPageTestApplicationLogin = new PageTestApplicationLogin(objClientConfiguration);
                        sbLoginJson.Append(",ErrorMessage:'" + objPageTestApplicationLogin.GetTestApplicationLoginErrorHtml("", strLoadErrorControlMessage).Replace("'", "\"") + "'");

                    }

                }
                sbLoginJson.Append("}");

                var LoginJson = sbLoginJson.ToString();
                return LoginJson;

            }
        }

我应该将return语句放在别处吗,因为我觉得这是导致这个错误的原因吗? 提前致谢

6 个答案:

答案 0 :(得分:3)

您测试if (strErrorType != string.Empty)。但是如果条件是false呢?在这种情况下,您的方法会返回什么?没有。

这就是造成编译错误的原因。您必须返回一些内容,即使它是null

或者,您也可以提出异常。例如,您可以添加:

else {
    throw new ArgumentException("strErrorType", "strErrorType cannot be empty");
}

进一步简单地解决编译问题,你的方法应该做什么?您测试strErrorType变量的空白。它应该被禁止吗?如果是,请抛出异常。如果不是,则返回一个足够的值(可能为null

答案 1 :(得分:1)

如果不是这样,则该方法无法返回。

if (strErrorType != string.Empty)

所以一定要在最后做点什么,也许会抛出异常或返回一些东西?

答案 2 :(得分:0)

你是对的,错误正在发生,因为如果代码没有输入第二个if语句,它将永远不会命中return语句。

我会这样做;

public string CreateLoginjson(string strErrorType, bool blIsAuthenticated)
        {

            StringBuilder sbLoginJson = new StringBuilder();
            if (blIsAuthenticated)
            {
                sbLoginJson.Append("{LoginSuccess:1");
            }
            else
            {
                sbLoginJson.Append("{LoginSuccess:0");
            }

            if (strErrorType != string.Empty)
            {
               //All your error code here

            }


            var LoginJson = sbLoginJson.ToString();
            return LoginJson;
        }

请注意IF语句

之外的最后两行的位置

答案 3 :(得分:0)

只有在满足某些条件(if (strErrorType != string.Empty))时,您的方法才会返回某些内容。如果不满足该条件,它也应该返回一些东西。换句话说,如果方法具有返回类型,则必须在任何情况下返回某些内容。除非抛出异常......

答案 4 :(得分:0)

public string CreateLoginjson(string strErrorType,bool blIsAuthenticated)         {

        StringBuilder sbLoginJson = new StringBuilder();
        if (blIsAuthenticated)
        {
            sbLoginJson.Append("{LoginSuccess:1");
        }
        else
        {
            sbLoginJson.Append("{LoginSuccess:0");
        }

        if (strErrorType != string.Empty)
        {
            if (strErrorType.TrimEnd(new char[] { ',' }) == "Token" || strErrorType.TrimEnd(new char[] { ',' }) == "BlankToken")
            {
                sbLoginJson.Append(",txtTestTokenNumber1:\"Error\"");
                sbLoginJson.Append(",txtTestTokenNumber2:\"Error\"");
                sbLoginJson.Append(",txtTestTokenNumber3:\"Error\"");
                sbLoginJson.Append(",txtTestTokenNumber4:\"Error\"");

            }


            if (strErrorType.TrimEnd(new char[] { ',' }) == "Password" || strErrorType.TrimEnd(new char[] { ',' }) == "BlankPassword")
            {
                sbLoginJson.Append(",txtPassword:\"Error\"");

            }

            if (strErrorType.TrimEnd(new char[] { ',' }) == "UserName" || strErrorType.TrimEnd(new char[] { ',' }) == "BlankUserName")
            {
                {
                    sbLoginJson.Append(",UserName:\"Error\"");

                }
                string strLoadErrorControlMessage = LoadErrorControl(strErrorType, string.Empty);

                if (strLoadErrorControlMessage != string.Empty)
                {
                    PageTestApplicationLogin objPageTestApplicationLogin = new PageTestApplicationLogin(objClientConfiguration);
                    sbLoginJson.Append(",ErrorMessage:'" + objPageTestApplicationLogin.GetTestApplicationLoginErrorHtml("", strLoadErrorControlMessage).Replace("'", "\"") + "'");

                }

            }
            sbLoginJson.Append("}");

            var LoginJson = sbLoginJson.ToString();
            return LoginJson;

        }

return ""; // need it
        }

答案 5 :(得分:0)

除了解决问题的所有答案之外,我只想添加一些有用的信息。

您应该强烈考虑strErrorType != string.Empty或者至少检查strErrorType!= null,而不是检查String.IsNullOrEmpty(strErrorType)

推理是如果strErrorType为null,它将通过您当前的测试,并且您将尝试在空字符串上调用方法,这将引发异常。