2016-02-29 83 views
1

我目前正在尝试解决这个问题,我遇到的是控制台发布错误的数组,如果有人知道如何解决这个问题。我该如何解决这个System.IndexOutOfRangeException:索引超出了数组的边界

错误在行246上。

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

错误日志

System.IndexOutOfRangeException:索引阵列的边界之外。 at Digital_World.SqlDB.SaveTamer(Client client)in C:\ Users \ Digimon Master \ Dropbox \ Digimon Master Project \ DMOFrosty'sPost \ Server \ ServerBuildingSection \ DigitalWorld \ Database - 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); 
        } 

回答

0

可能导致您的digimonlist长度实际上只有3个,所以数组索引0-2

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

尝试> 所以更换>=

     if (Tamer.DigimonList.Length > 3) { 
+0

我已经尝试过此修复程序,但仍然收到相同的错误。 – Entonez

相关问题