Предупреждение о недоступном коде - PullRequest
0 голосов
/ 23 марта 2012

Хорошо, поэтому я уже давно пытаюсь это исправить.У меня есть «предупреждение» в моем коде - «Обнаружен недоступный код».Я не уверен, как это исправить, поэтому я публикую здесь.Ниже приведен код:

    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 ]

4 голосов
/ 23 марта 2012

General.ServerRestart () должен произойти до того, как вы вызовете return.Return немедленно завершает работу метода, прежде чем любой оставшийся код не будет запущен, поэтому предупреждение о «недоступном коде»

2 голосов
/ 23 марта 2012
catch (Exception Exc)
{
    General.WriteLine(Exc.ToString());
    return 0;
    General.ServerRestart();
}

В вашем блоке catch вы возвращаете значение и затем выполняете дополнительные функции.

Когда вы пишете «return 0;», он не «устанавливает» возвращаемое значение равным 0, когда функция завершает работу, но возвращает значение 0 в результате выполнения функции и останавливает функцию в этой точке. Поэтому, когда у вас есть оператор возврата, любой код впоследствии никогда не будет выполнен, потому что функция завершится до этого в операторе возврата.

Обратите внимание на этот сценарий:

// ... some code 1

if (someExpression)
{
    // ... some code 2

    return;

    // ... some code 3
}

// ... some code 4

return;

// ... some code 5

Код1 всегда будет выполняться. Если someExpression имеет значение true - code2 будет выполняться (а другие не будут), в противном случае - код 4 будет выполнен (а другие не будут). В любом случае code3 и code5 не будут выполняться, потому что в каждом из их перспективных путей кода они идут после оператора return.

1 голос
/ 23 марта 2012
    catch (Exception Exc) { General.WriteLine(Exc.ToString()); return 0; General.ServerRestart(); }

должно быть:

    catch (Exception Exc) { General.WriteLine(Exc.ToString()); General.ServerRestart(); return 0; }

Вы не можете вызвать General.ServerRestart после того, как только что вышли из функции.

1 голос
/ 23 марта 2012

Вы возвращаетесь преждевременно.Заявления после возврата не будут выполнены, поскольку они «недоступны».

0 голосов
/ 23 марта 2012

когда вы что-то возвращаете, метод заканчивается. Невозможно вернуть несколько значений, если это не список. и даже списки будут возвращены в одну строку, как return ListName;

...