2017-02-22 52 views
0

从通用列表中删除项目时遇到问题。正确添加作品,我可以将新项目添加到列表中。但是,我似乎无法删除一个项目。统一5从列表中删除

这是我的代码:

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)); 

我有什么错?

回答

3

调用equippedItemsIDListLocal.Remove时,这样比较实例(不是你的情况下,里面的值)时,该Remove找不到你添加的第一个Lista并不会删除您创建一个Lista的新实例任何东西。

而是执行此操作:

Lista newLista = new Lista(iID, itemID) ; 

equippedItemsIDListLocal.Add(newLista); 

equippedItemsIDListLocal.Remove(newLista); 

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

如果需要,您可以实现IEquatable<T>泛型接口的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

+0

谢谢^^现在我明白了应该怎么样子! –