我有一些登录功能的代码。我不能让返回语句在try语句中被识别,这似乎是放置它的唯一逻辑位置。其中,return语句当前允许用户在密码不正确的情况下登录。如果我把return语句放在其他地方,我会收到错误“不是所有的代码路径都返回值”。
public static User selectUser(string userName, string password)
{
// code to validate user
try
{
if (isUserValid)
{
MessageBox.Show("Login successful!");
}
else
{
MessageBox.Show("Login failed");
}
}
}
catch (Exception e)
{
MessageBox.Show(e.ToString());
}
return aUser;
}发布于 2013-03-16 14:29:30
您应该只在成功的场景中返回user对象,否则返回null。为了确定用户是否已经过身份验证,在使用selectUser方法时,检查user对象与null
User aUser = null;
try {
while (dbReader.Read())
{
if (dbReader.HasRows)
{
MessageBox.Show("Login successful!");
aUser = new User();
}
else
{
MessageBox.Show("Login failed");
}
}
}
catch (Exception e) {
MessageBox.Show(e.ToString());
}
finally {
return aUser;
}发布于 2013-03-16 14:41:51
在解释你得到的错误代码时,MSDN有非常好的错误例子-- CS0161。
您的示例有多个“代码路径”--即根据if/try语句中的条件执行的命令序列。
以下是主要的可能路径:
catch块,end of function如果您只从一些代码路径返回结果(即问题中的1和2),并从“函数结束”中删除return,则3个代码路径中只有2个将具有返回语句。
在这种情况下,修复方法可能是始终在函数的末尾使用return null;,并在拥有有效用户对象的地方使用return validatedUser;跳出。
发布于 2013-03-16 14:36:41
public static User selectUser(string userName, string password)
{
User aUser = new User();
if (sConnection.State == ConnectionState.Closed)
sConnection.Open();
OleDbCommand cmd = sConnection.CreateCommand();
OleDbDataReader dbReader = null;
string sql = "SELECT * FROM [User] WHERE ([userName]='" + userName + "' AND [Password]='" + password + "')";
cmd.CommandText = sql;
dbReader = cmd.ExecuteReader();
try
{
while (dbReader.Read())
{
if (dbReader.HasRows)
{
MessageBox.Show("Login successful!");
aUser.UserName = username;
return aUser;
}
else
{
MessageBox.Show("Login failed");
aUser.UserName =string.empty;
}
}
}
catch (Exception e)
{
MessageBox.Show(e.ToString());
aUser.UserName = string.empty;
}
return aUser;
}
After you invoke this function, check the return IsNULLofEmpty(aUser.Username)https://stackoverflow.com/questions/15446257
复制相似问题