我的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语句放在别处吗,因为我觉得这是导致这个错误的原因吗? 提前致谢
答案 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,它将通过您当前的测试,并且您将尝试在空字符串上调用方法,这将引发异常。