检测到无法访问的代码警告
本文关键字:代码 警告 访问 检测 | 更新日期: 2023-09-27 18:28:57
好吧,我已经尝试解决这个问题很长一段时间了。我的代码中有一个"警告"-"检测到无法访问的代码"。我不知道如何解决这个问题,这就是我在这里发帖的原因。以下是代码:
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();
General.ServerRestart()必须在调用return之前发生。Return在任何剩余代码未运行之前立即退出该方法,因此会出现"无法访问的代码"的警告
catch (Exception Exc)
{
General.WriteLine(Exc.ToString());
return 0;
General.ServerRestart();
}
在catch块中,您将返回一个值,然后执行额外的函数。
当您编写"return 0;"时,它不会在函数完成时将返回值"设置"为0,但它会返回值0作为函数的结果,并在该点停止函数。因此,当您有一个return语句时,之后的任何代码都将永远不会执行,因为函数将在此之前在return语句处终止。
注意这个场景:
// ... some code 1
if (someExpression)
{
// ... some code 2
return;
// ... some code 3
}
// ... some code 4
return;
// ... some code 5
代码1将始终执行。如果someExpression为true,则代码2将执行(而其他代码不会执行),否则代码4将执行(其他代码不会)。在任何情况下,code3和code5都不会执行,因为在它们的每个透视代码路径中,它们都在返回语句之后。
您过早返回。返回后的语句将不会执行,因为它们是"不可访问的"。
catch (Exception Exc) { General.WriteLine(Exc.ToString()); return 0; General.ServerRestart(); }
应该是:
catch (Exception Exc) { General.WriteLine(Exc.ToString()); General.ServerRestart(); return 0; }
刚退出函数后,无法调用General.ServerRestart。
当您返回某个东西时,它将结束该方法。除非是列表,否则不可能返回多个值。甚至列表将在一行中返回,如return ListName;