2016-02-29 54 views
0

我目前正在嘗試解決這個問題,我遇到的是控制檯發佈錯誤的數組,如果有人知道如何解決這個問題。我該如何解決此System.IndexOutOfRangeException:索引超出了數組的範圍DMG

如果你可以加我在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(客戶端客戶端) 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); 
     } 
    } 
+0

的錯誤是非常直截了當'Tamer.DigimonList'還沒有4 itens您試圖訪問不存在的物品 –

回答

0

這意味着沒有第4(指數以零開頭)項陣列上。在執行if條件之前,您應該首先檢查數組的數量。

UPDATE 你的條件應該是「如果你的數組數等於4」

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

託尼你有Skype嗎,如果有的話,我可以加你一些幫助嗎? –