无缘无故无法再编辑列表项

时间:2019-06-15 18:12:04

标签: c# linq

我正在制作基于文本的僵尸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的默认值。我的主项目仍然可以编译,没有警告或错误,但是如何获取可用的信息供您使用?

1 个答案:

答案 0 :(得分:1)

哦,天哪,我错过了!在工作台布尔检查中。而不是将工作台工具设置为0,而是将每个项目都重置了... 5个小时了...不过谢谢。 编辑:我进入了每一行代码,监视着我的物品数量,直到找到它为止。