-1

我的 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 语句放在其他地方,因为我觉得这就是导致此错误的原因?提前致谢

4

6 回答 6

3

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

这就是导致编译错误的原因。你必须返回一些东西,即使它是null.

或者,您也可以引发异常。例如,您可以添加:

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

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

于 2012-08-23T09:08:05.037 回答
1

如果这不是真的,那么该方法不会返回。

if (strErrorType != string.Empty)

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

于 2012-08-23T09:08:20.223 回答
0

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

于 2012-08-23T09:09:05.753 回答
0

公共字符串 CreateLoginjson(字符串 strErrorType,布尔 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
        }
于 2012-08-23T09:09:57.103 回答
0

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

而不是检查strErrorType != string.Empty,您应该强烈考虑String.IsNullOrEmpty(strErrorType)或至少在某些时候检查 strErrorType != null 。

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

于 2012-08-23T09:54:49.110 回答
0

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

我会这样做;

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语句之外的位置

于 2012-08-23T09:07:52.617 回答