我有对象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);
无效。
答案 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>();