2015-07-23 2 views
0

Итак, когда я изначально писал это около 6 месяцев назад, он работал нормально, но теперь по какой-то причине он ловит. Я очень новичок в кодировании и понятия не имею, как я сужу его, чтобы выяснить, как решить эту проблему. любые советы будут высоко оценены. (он основан на учебнике, и очень мало было изменено из этого учебника. Еще несколько дочерних узлов добавлены к сохранению XML.) Если я устанавливаю точки останова в каждой строке после «playerdata.LoadXml ... »и перед первым« foreach »он пропускает maxhp, maxcarry, проблему и player.CurrentLocation.Как я могу сузить то, что ловит в моем коде

public static Player CreatePlayerFromXmlString(string xmlPlayerData) 
    { 
     try 
     { 
      XmlDocument playerData = new XmlDocument(); 
      playerData.LoadXml(xmlPlayerData); 
      int currenthp = Convert.ToInt32(playerData.SelectSingleNode("/Player/Stats/CurrentHP").InnerText); 
      int maxhp = Convert.ToInt32(playerData.SelectSingleNode("/Player/Stats/MaxHP").InnerText); 
      int gold = Convert.ToInt32(playerData.SelectSingleNode("/Player/Stats/Gold").InnerText); 
      int xp = Convert.ToInt32(playerData.SelectSingleNode("/Player/Stats/XP").InnerText); 
      int lvl = Convert.ToInt32(playerData.SelectSingleNode("/Player/Stats/Lvl").InnerText); 
      decimal currentcarry = Convert.ToInt32(playerData.SelectSingleNode("/Player/Stats/CurrentCarry").InnerText); 
      decimal maxcarry = Convert.ToInt32(playerData.SelectSingleNode("/Player/Stats/MaxCarry").InnerText); 
      int trouble = Convert.ToInt32(playerData.SelectSingleNode("/Player/Stats/Trouble").InnerText); 
      Player player = new Player(currenthp, maxhp, gold, xp, lvl, currentcarry, maxcarry, trouble); 
      int currentLocationID = Convert.ToInt32(playerData.SelectSingleNode("/Player/Stats/CurrentLocation").InnerText); 
      player.CurrentLocation = World.LocationByID(currentLocationID); 
      foreach (XmlNode node in playerData.SelectNodes("/Player/InventoryItems/InventoryItem")) 
      { 
       int id = Convert.ToInt32(node.Attributes["ID"].Value); 
       int quantity = Convert.ToInt32(node.Attributes["Quantity"].Value); 
       for (int i = 0; i < quantity; i++) 
       { 
        player.AddItemToInventory(World.ItemByID(id)); 
       } 
      } 
      foreach (XmlNode node in playerData.SelectNodes("/Player/PlayerQuests/PlayerQuest")) 
      { 
       int id = Convert.ToInt32(node.Attributes["ID"].Value); 
       bool isCompleted = Convert.ToBoolean(node.Attributes["IsComplete"].Value); 
       PlayerQuest playerQuest = new PlayerQuest(World.QuestByID(id)); 
       playerQuest.IsComplete = isCompleted; 
       player.Quests.Add(playerQuest); 
      } 
      return player; 
     } 
     catch 
     { 
      return Player.CreateDefaultPlayer(); 
     } 
    } 

ответ

1
catch (Exception e) 
{ 
    Console.WriteLine("{0} Exception caught.", e); 
    Console.WriteLine(e.StackTrace); 
} 

Это должно дать вам больше намек на то, что происходит.

+0

Спасибо! Я закончил использование 'Diagnostics.Debug.Writeline' вместо' Console.Writeline', но это прямо указывало мне на строку. Оказывается, это не очень понравилось десятичным элементам. –

+0

Вы можете использовать 'Int32.TryParse()', если вы не уверены в этом. –

-1

При вызове try/catch, вы можете указать, что вы хотите, чтобы поймать, указав исключения вы хотите поймать:

try 
{ 
    // do stuff... 
} 
catch (Exception e1) 
{ 
    // do stuff with e1... 
    Console.WriteLine(e1.Number + " - " + e1.Message); 
} 
catch (AnotherException e2) 
{ 
    // do stuff with e2... 
    Console.WriteLine(e2.Number + " - " + e2.Message); 
} 
etc... 
Смежные вопросы