我正在制作基于文本的僵尸SIM。播放器类具有一个后备系统,该后备系统包含一个称为“项目”的项目列表。在初始化时,将“ items”设置为等于我的ItemManager“ gameItems”列表,并且每个项目都具有一个int数量。我将FirstOrDefault
输入ID,获取金额,然后添加所需金额。
这个工作了一段时间了,我完全没有问题,可以添加一些东西来测试手工系统。但是,我的视觉工作室似乎无缘无故崩溃了几次,突然间,以我尝试过的任何方式,它根本没有用。
我尝试仅使用对ItemManager的引用并进行处理,但是无论是在gameItems中还是在背包中,更改都不会生效。我将ReferenceEquals放在了我能想到的任何地方,并且它们总是返回true,因此referenceEquals(backpack.items, itemMananger.gameItems)
始终返回true,无论该项目如何。即使我比较FirstOrDefault,也要返回游戏项目中具有相同ID的物品。
另一个疯狂的警告;当我插入一个断点并检查游戏物品和背包物品的值时,两者都有正确的金额!但是我继续的第二秒又回到了0!
using System;
using System.Collections.Generic;
using System.Linq;
namespace test
{
class Program
{
static void Main(string[] args)
{
Backpack backpack = new Backpack();
backpack.AddItem();
foreach(Item item in backpack.items)
{
Console.WriteLine(item);
}
}
}
public class Item
{
public int id, amount;
public Item(int id, int amount = 0)
{
this.id = id;
this.amount = amount;
}
public override string ToString()
{
return "id: " + id + " Amount: " + amount;
}
}
public class Backpack
{
public List<Item> items;
public Backpack()
{
items = ItemManager.gameItems;
}
public void AddItem(int id=1001, int amount=10)
{
items.FirstOrDefault(item => item.id == id).amount += amount;
}
}
public static class ItemManager
{
public static List<Item> gameItems;
static ItemManager()
{
gameItems = new List<Item>();
gameItems.Add(new Item(1001, 0));
}
}
}
这是我项目中以前工作的模型重现。这是在一个单独的项目中完成的,并且可以正常使用:id: 1001 amount: 10
。
Visual Studio崩溃了,突然这个过程不再起作用。原始项目的输出为:id:1001 amount:0
,无论是默认的默认值还是传递到AddItem
的默认值。我的主项目仍然可以编译,没有警告或错误,但是如何获取可用的信息供您使用?
答案 0 :(得分:1)
哦,天哪,我错过了!在工作台布尔检查中。而不是将工作台工具设置为0,而是将每个项目都重置了... 5个小时了...不过谢谢。 编辑:我进入了每一行代码,监视着我的物品数量,直到找到它为止。