0

私はオブジェクトを持っていますCard

public class Card {
    public int ID { get; set; }
    public string Name { get; set; }
    public Color CardColor { get; set; }
    public int Size { get; set; }
}

のリストがありCardます。Card異なるIDが他のプロパティが同じであるリストから削除したい。

cardList.Remove(mycard);

動かない。

4

4 に答える 4

0

達成したい内容によっては、最初から同じ ID を持つカードが挿入されないようにする必要がある場合があります。

2 つの簡単な方法があります。

  • 次のような比較子でセットを使用します。

    public class CardComparer : IEqualityComparer<Card>
    {
        public bool Equals(Card x, Card y) { return x.ID == y.ID; }
        public int GetHashCode(Card obj) { return obj.ID; }
    }
    
    var hash = new HashSet<Card>(new CardComparer());
    
  • ID をキーとして辞書を使用します。

    var dict = new Dictionary<int, Card>();
    
于 2013-10-03T12:36:02.280 に答える
0

Equals メソッドをオーバーライドする必要があります。Remove Equals を使用して、そのカードが削除したいカードであるかどうかを評価します。そのため、2 つのカードが等しいかどうかを評価するロジックを使用して Card クラスでオーバーライドします。

于 2013-10-03T11:46:31.923 に答える
0
foreach(var card in cardList)
{
    var cardsMatching =     
        cardList.All(x=>x.Name==card.Name&&x.Color==card.Color&&x.Size==card.Size); 

    cardsMatching.Foreach(y=> {
         cardList.Remove(cardList.IndexOf(y));
    });
}
于 2013-10-03T11:48:56.840 に答える