0

好的,所以我一直在努力解决这个问题。我的代码中有一个“警告”-“检测到无法访问的代码”。我不知道如何解决这个问题,这就是我在这里发帖的原因。下面是代码:

    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();

4

5 回答 5

4

General.ServerRestart() 必须在调用 return 之前发生。Return 在没有运行任何剩余代码之前立即退出该方法,因此会出现“无法访问代码”的警告

于 2012-03-23T03:09:15.703 回答
2
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

code1 将始终执行。如果 someExpression 为真 - code2 将执行(而其他人不会),否则 - 代码 4 将执行(而其他人不会)。在任何情况下,code3 和 code5 都不会执行,因为在它们的每个透视代码路径中,它们都位于 return 语句之后。

于 2012-03-23T03:11:49.917 回答
1

你过早地回来了。返回后的语句将不会被执行,因为它们是“无法访问的”。

于 2012-03-23T03:07:48.047 回答
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。

于 2012-03-23T03:10:29.967 回答
0

当您返回某些东西时,它会结束该方法。它不可能返回多个值,除非它是一个列表。甚至列表将在一行中返回,例如return ListName;

于 2012-03-23T03:08:12.477 回答