簡體   English   中英

從列表中刪除項目

[英]remove item from a 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清單。 我想從ID不同但其他屬性相同的列表中刪除Card

cardList.Remove(mycard);

不管用。

通過比較名稱(或其他名稱)在列表中找到匹配的項目,然后將其刪除。

例如:

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

您應該重寫Equals方法。 刪除使用等於評估卡是否是您要刪除的卡片。 因此在Card類中使用邏輯來覆蓋它,以評估兩張卡是否相等。

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));
    });
}

根據您要實現的目標,您可能希望首先阻止具有相同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>(); 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM