如何修复此 System.IndexOutOfRangeException:索引超出数组范围

Posted

技术标签:

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

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

错误出现在第 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("char0", 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);
                    

【问题讨论】:

【参考方案1】:

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

                    if (Tamer.DigimonList.Length >= 3) 

尝试将&gt;= 替换为&gt; 所以:

                        if (Tamer.DigimonList.Length > 3) 

【讨论】:

我仍然尝试过这个修复,但我仍然遇到同样的错误。

以上是关于如何修复此 System.IndexOutOfRangeException:索引超出数组范围的主要内容,如果未能解决你的问题,请参考以下文章

如何修复此 System.IndexOutOfRangeException:索引超出数组范围

出现此错误时如何修复gradle?

按钮无法访问。如何修复此代码?

如何获得修复此错误的 Stacktrace?

如何修复此类型错误?

如何修复此“忽略 SQL 语句”错误?