我目前正在尝试解决此问题,如果有人知道如何解决此问题,控制台将在该位置释放该阵列的错误。

该错误在第246行上。

if (Tamer.DigimonList[3] == null) qry.Add("mercenary3", null);


错误日志


  System.IndexOutOfRangeException:索引超出数组的范围。
     在C:\ Users \ Digimon Master \ Dropbox \ Digimon Master Project \ DMOFrosty'sPost \ Server \ ServerBuildingSection \ DigitalWorld \ Database中的Digital_World.SqlDB.SaveTamer(客户端客户端)处-Game.cs:line 246
  连接已关闭。


代码

        public static void SaveTamer(Client client)
    {
        int lastChar = -1, charId = -1;

        try
        {
            using (MySqlConnection con = Connect())
            using (MySqlCommand cmd = new MySqlCommand("SELECT * FROM `acct` WHERE `accountId` = @acct", con))
            {
                cmd.Parameters.AddWithValue("@acct", client.AccountID);
                using (MySqlDataReader dr = cmd.ExecuteReader(System.Data.CommandBehavior.SingleRow))
                    if (dr.HasRows && dr.Read())
                    {
                        lastChar = (int)dr["lastChar"];
                        if (lastChar != -1)
                        {
                            charId = (int)dr[string.Format("char{0}", lastChar + 1)];
                        }
                    }
            }

            if (lastChar != -1)
            {
                Character Tamer = client.Tamer;
                using (MySqlConnection con = Connect())
                {
                    Query qry = new Query(Query.QueryMode.UPDATE, "chars", new Tuple<string, object>("characterId", Tamer.CharacterId));
                    qry.Add("charModel", (int)Tamer.Model);
                    qry.Add("charName", Tamer.Name);
                    qry.Add("charLv", Tamer.Level);
                    qry.Add("experience", Tamer.EXP);
                    qry.Add("money", Tamer.Money);

                    qry.Add("partner", Tamer.DigimonList[0].DigiId);
                    if (Tamer.DigimonList[1] == null) qry.Add("mercenary1", null);
                    else qry.Add("mercenary1", Tamer.DigimonList[1].DigiId);
                    if (Tamer.DigimonList[2] == null) qry.Add("mercenary2", null);
                    else qry.Add("mercenary2", Tamer.DigimonList[2].DigiId);
                    if (Tamer.DigimonList.Length >= 3) {
                        if (Tamer.DigimonList[3] == null) qry.Add("mercenary3", null);
                            else qry.Add("mercenary3", Tamer.DigimonList[3].DigiId);
                    }

最佳答案

可能是因为您的数码兽列表长度实际上是3,所以数组索引是0-2

                    if (Tamer.DigimonList.Length >= 3) {


尝试用>=替换>
所以:

                        if (Tamer.DigimonList.Length > 3) {

09-13 09:07