【问题标题】:How can I fix this System.IndexOutOfRangeException: Index was outside the bounds of the array DMG如何修复此 System.IndexOutOfRangeException:索引超出数组 DMG 的范围
【发布时间】:2016-06-11 22:59:28
【问题描述】:

我目前正在尝试解决此问题,如果有人知道如何解决此问题,我遇到的问题是控制台会发出阵列错误。

如果你可以在 Skype 上加我,我是 Bradley.dale4

错误在第 247 行。

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

接受客户:151.226.122.217:60417 27 System.IndexOutOfRangeException:索引超出范围 大批。在 Digital_World.SqlDB.SaveTamer(Client client) 中 C:\Users\Digimon Master\Dropbox\Digimon Master Project\DMOFrosty'sPost\Server\ServerBuildingSection\DigitalWorld\Database - Game.cs:line 247 连接已关闭。

守则

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

                    qry.Add("map", Tamer.Location.Map);
                    qry.Add("x", Tamer.Location.PosX);
                    qry.Add("y", Tamer.Location.PosY);

                    qry.Add("inventoryLimit", Tamer.InventorySize);
                    qry.Add("storageLimit", Tamer.StorageSize);
                    qry.Add("archiveLimit", Tamer.ArchiveSize);

                    qry.Add("maxHP", Tamer.MaxHP);
                    qry.Add("maxDS", Tamer.MaxDS);
                    qry.Add("HP", Tamer.HP);
                    qry.Add("DS", Tamer.DS);
                    qry.Add("AT", Tamer.AT);
                    qry.Add("DE", Tamer.DE);
                    qry.Add("MS", Tamer.MS);
                    qry.Add("Fatigue", Tamer.Fatigue);

                    qry.Add("incubator", Tamer.Incubator);
                    qry.Add("incubatorLevel", Tamer.IncubatorLevel);

                    BinaryFormatter f = new BinaryFormatter();
                    using (MemoryStream m = new MemoryStream())
                    {
                        f.Serialize(m, Tamer.ArchivedDigimon);
                        qry.Add("archive", m.ToArray());
                    }


                    //Trying to add cashvault and tempvault
                    qry.Add("inventory", Tamer.Inventory.Serialize());
                    qry.Add("equipment", Tamer.Equipment.Serialize());
                    qry.Add("storage", Tamer.Storage.Serialize());
                    qry.Add("quests", Tamer.Quests.Serialize());

                    using (MySqlCommand cmd = qry.GetCommand(con))
                    {
                        cmd.ExecuteNonQuery();
                    }
                }
                for (int i = 0; i < Tamer.DigimonList.Length; i++)
                {
                    if (Tamer.DigimonList[i] != null)
                        SaveDigimon(Tamer.DigimonList[i]);
                }
            }
        }
        catch (Exception e)
        {
            Console.WriteLine(e);
        }
    }

【问题讨论】:

  • 错误很简单 Tamer.DigimonList 没有 4 个您正在尝试访问不存在的项目

标签: mysql arrays database


【解决方案1】:

这意味着您的数组中没有第 4 个(索引从零开始)项。在执行 if 条件之前,您应该首先检查数组计数。

更新 您的条件应该是“如果您的数组计数等于 4”

if (Tamer.DigimonList.Length == 4)
{
    if (Tamer.DigimonList[3] == null) qry.Add("mercenary3", null);
    else qry.Add("mercenary3", Tamer.DigimonList[3].DigiId);
}

【讨论】:

  • 托尼你有Skype吗?如果有,我可以加你寻求帮助吗?
猜你喜欢
  • 2016-06-11
  • 2012-01-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-30
相关资源
最近更新 更多