无法访问代码检测警告

时间:2012-03-23 03:03:00

标签: c# warnings unreachable-code

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

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

5 个答案:

答案 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;

之类的行中返回