2017-02-22 23 views
0

一般的なリストから項目を削除する際に問題があります。追加が正しく動作し、新しいアイテムをリストに追加できました。しかし、アイテムを削除することはできません。unity 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は、2つの要素を比較することObject.Equals機能を使用しています。この関数はの参照(メモリアドレスに似ています)を比較します。インスタンス 'A'を作成すると、参照が取得されます。新しいインスタンス( 'B')を作成すると、別の参照になります。したがって、Object.Equals(A, B)はfalseを返します。

IEquatable<T>ジェネリックインターフェイスの機能を実装することができます。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

をありがとう^^今、私はそれがどのように見えるべきかを理解します! –

関連する問題