List.Remove(项目项目)的行为不符合预期

时间:2018-07-11 04:04:51

标签: c# unity3d

我正在使用Unity,并尝试使用字典键/值对从列表中删除重复项。

问题: 运行代码时,如果重复,则列表中的第一项将被删除,而不是“ List.Remove(Item item)”这样的特定项。

    updateCart(context, cart) {
        return new Promise((resolve, reject) => {
            axios.patch(`update/cart/${cart.id}` , {
                id: cart.rowId,
                qty: cart.qty,
                size: cart.sizeVal,
                image: cart.image
            })
            .then(response => {
                context.commit('updateCart', response.data)
                resolve(response)
            })
            .catch(error => {
                reject(error)
            })
        })

    },

在if语句public static Dictionary<string, Farm> farmDict = new Dictionary<string, Farm>(); public static List<Farm> farmBuildingsList = new List<Farm>(); public static void UpdateList<T>(List<T> list, Dictionary<string, T> dict, string ID, T resBuilding) where T : ResourceBuildings, new() { T obj = new T() { ID = resBuilding.ID, hourlyIncome = resBuilding.hourlyIncome, baseHour = resBuilding.baseHour, incomeIncrement = resBuilding.incomeIncrement, totalSupply = resBuilding.totalSupply }; if (dict.ContainsKey(ID)) { dict[ID] = obj; list.Remove(dict[ID]); list.Add(dict[ID]); } else { dict.Add(obj.ID, obj); list.Add(obj); } } 上使用Debug.Log为空,但是dict [ID] .ID(以及所有属性)包含正确的值,因此整个内容也不为空。我不确定这是否是问题,但我已要求在gamedev.stackexchange中修复Object.name的解决方案。

我已经阅读了更合适的方法(https://www.dotnetperls.com/duplicates和其他stackoverflow帖子),以使用Linq和哈希集删除重复项,但是我不知道如何覆盖Equals和HashCode函数。

1 个答案:

答案 0 :(得分:3)

简短答案

dict[ID] = new T
{
    ID = resBuilding.ID,
    hourlyIncome = resBuilding.hourlyIncome,
    baseHour = resBuilding.baseHour,
    incomeIncrement = resBuilding.incomeIncrement,
    totalSupply = resBuilding.totalSupply
};
list.RemoveAll(item => item.ID == ID);
list.Add(dict[ID]);

旁注dict[key] = value足以创建具有指定键的新元素或更新现有元素(请参见docs),因此整个{{1 }}毫无意义。


扩展答案

也许这是一个XY Problem,并且您当前的方法可能是隐藏您要解决的实际问题(可能是:I want a dictionary-like structure that shows up in inspector)。