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

2

通过比较名称(或其他),在列表中找到匹配的项目,然后将其删除。

例如:

var toRemove = cardList.SingleOrDefault(c => c.Name == mycard.Name);
if (toRemove != null) cardList.Remove(toRemove);
于 2013-10-03T11:44:59.750 回答
0

您应该覆盖 Equals 方法。Remove 使用 Equals 来评估该卡是否是您要删除的卡。因此,在 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 回答
0

根据您想要实现的目标,您可能希望首先防止插入具有相同 id 的卡。

有两种简单的方法:

  • 使用带有比较器的集合,例如:

    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 回答