从列表中删除项目

时间:2013-10-03 11:39:26

标签: c# list

我有对象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 个答案:

答案 0 :(得分:2)

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

例如:

var toRemove = cardList.SingleOrDefault(c => c.Name == mycard.Name);
if (toRemove != null) cardList.Remove(toRemove);

答案 1 :(得分:0)

您应该重写Equals方法。删除使用等于评估卡是否是您要删除的卡。 因此,在Card类中使用逻辑来覆盖它,以评估两张卡是否等于。

答案 2 :(得分: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));
    });
}

答案 3 :(得分: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>();