【问题标题】:unity 5 Remove from listunity 5 从列表中删除
【发布时间】:2017-02-22 17:39:05
【问题描述】:

我在从通用列表中删除项目时遇到问题。添加工作正常,我可以将新项目添加到列表中。但是,我似乎无法删除项目。

这是我的代码:

public List<Lista> equippedItemsIDListLocal = new List<Lista>();

    [Serializable]
    public class Lista
    {
        public int playerID;
        public int itemIDD;

        public Lista(int newPlayerID ,int newItemID)
        {
            playerID = newPlayerID;
            itemIDD = newItemID;
        }

    }

然后我用这些行添加和删除:

equippedItemsIDListLocal.Add(new Lista(iID, itemID));

equippedItemsIDListLocal.Remove(new Lista(iID, itemID));

我哪里做错了?

【问题讨论】:

    标签: c# list unity3d


    【解决方案1】:

    您在调用equippedItemsIDListLocal.Remove创建Lista 的新实例,因此在比较实例(不是实例中的值)时,@987654324 @ 找不到您添加的第一个 Lista 并且不会删除任何内容。

    改为这样做:

    Lista newLista = new Lista(iID, itemID) ;
    
    equippedItemsIDListLocal.Add( newLista );
    
    equippedItemsIDListLocal.Remove(newLista );
    

    函数Remove 使用Object.Equals 函数来比较两个元素。该函数比较references(类似于内存地址)。当您创建实例“A”时,您会获得一个引用。创建新实例 ('B') 时,您会获得另一个参考。因此,Object.Equals( A, B ) 返回 false。

    如果你愿意,你可以实现IEquatable&lt;T&gt;泛型接口的Equals函数,Remove函数会调用它来比较实例。

        public override bool Equals(object obj)
        {
            if (obj == null) return false;
            Lista objAsLista = obj as Lista;
            if (objAsLista == null) return false;
            else return Equals(objAsLista);
        }
    
        public bool Equals(Lista other)
        {
            if (other == null) return false;
            return (this.playerID.Equals(other.playerID) && this.itemIDD.Equals(other.itemIDD) );
        }
    

    检查以下链接:

    https://msdn.microsoft.com/en-us/library/cd666k3e(v=vs.110).aspx

    【讨论】:

    • 谢谢 ^^ 现在我明白它应该是什么样子了!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多