好吧,所以我一直试图解决这个问题。我的代码中有一个“警告” - “检测到无法访问的代码”。我不知道如何解决这个问题,这就是我在这里发帖的原因。以下是代码:
public static byte Authenticate(string UserName, string Password)
{
try
{
MySqlDataAdapter DataAdapter = new MySqlDataAdapter("SELECT * FROM `Accounts` WHERE `AccountID` = '" + UserName + "'", Connection);
DataSet DSet = new DataSet();
DataAdapter.Fill(DSet, "Account");
if (DSet != null && DSet.Tables["Account"].Rows.Count > 0)
{
DataRow DR = DSet.Tables["Account"].Rows[0];
string Pass = (string)DR["Password"];
if (Pass == Password || Pass == "")
{
if (Pass == "")
{
MySqlCommand Command = new MySqlCommand("UPDATE `Accounts` SET `Password` = '" + Password + "' WHERE `AccountID` = '" + UserName + "'", Connection);
Command.ExecuteNonQuery();
}
uint LogonCount = (uint)DR["LogonCount"];
LogonCount++;
MySqlCommand Comm = new MySqlCommand("UPDATE `Accounts` SET `LogonCount` = " + LogonCount + " WHERE `AccountID` = '" + UserName + "'", Connection);
Comm.ExecuteNonQuery();
return Convert.ToByte((uint)DR["LogonType"]);
}
else
return 0;
}
else
return 0;
}
catch (Exception Exc) { General.WriteLine(Exc.ToString()); return 0; General.ServerRestart(); }
}
我不知道如何将其突出显示为红色,因此我将发布特定的行:
catch (Exception Exc) { General.WriteLine(Exc.ToString()); return 0; General.ServerRestart(); }
警告是“常规”.ServerRestart();
答案 0 :(得分:4)
General.ServerRestart()必须在调用return之前发生。在没有运行任何剩余代码之前,返回立即退出方法,因此警告“无法访问的代码”
答案 1 :(得分:2)
catch (Exception Exc)
{
General.WriteLine(Exc.ToString());
return 0;
General.ServerRestart();
}
在catch块中,您将返回一个值,然后执行额外的功能。
当你写“return 0;”时,它不会在函数完成时将返回值“设置”为0,但它会返回值0作为函数的结果并在该点停止函数。 因此,当你有一个return语句时,之后的任何代码将永远不会执行,因为该函数将在返回语句之前终止。
请注意这种情况:
// ... some code 1
if (someExpression)
{
// ... some code 2
return;
// ... some code 3
}
// ... some code 4
return;
// ... some code 5
code1将始终执行。如果someExpression为true - 将执行code2(而其他人不会执行),否则 - 代码4将执行(而其他代码则不会执行)。 在任何情况下,code3和code5都不会执行,因为在每个透视代码路径中,它们都在return语句之后。
答案 2 :(得分:1)
你过早地回来了。返回后的语句将不会执行,因为它们是“无法访问”。
答案 3 :(得分:1)
catch (Exception Exc) { General.WriteLine(Exc.ToString()); return 0; General.ServerRestart(); }
应该是:
catch (Exception Exc) { General.WriteLine(Exc.ToString()); General.ServerRestart(); return 0; }
退出该功能后,您无法调用General.ServerRestart。
答案 4 :(得分:0)
当你返回一些东西时,它结束了方法。它不可能返回多个值,除非它是一个列表。甚至列表也会在return ListName;