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 が true の場合 - code2 が実行されます (他は実行されません)。それ以外の場合 - コード 4 が実行されます (他は実行されません)。いずれにせよ、code3 と code5 は実行されません。これは、それぞれのパースペクティブ コード パスで、return ステートメントの後に来るためです。

于 2012-03-23T03:11:49.917 に答える
1

あなたは時期尚早に戻っています。return に続くステートメントは「到達不能」であるため実行されません。

于 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

何かを返すと、メソッドが終了します。リストでない限り、複数の値を返すことはできません。リストでさえ、次のように1行で返されますreturn ListName;

于 2012-03-23T03:08:12.477 に答える