Итак, когда я изначально писал это около 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();
}
}
Спасибо! Я закончил использование 'Diagnostics.Debug.Writeline' вместо' Console.Writeline', но это прямо указывало мне на строку. Оказывается, это не очень понравилось десятичным элементам. –
Вы можете использовать 'Int32.TryParse()', если вы не уверены в этом. –