2014-04-06 60 views
1

因此,我已經列出了一個列表,其中存儲了使用鏈接和類別構建的Feeds對象。現在我想刪除具有特定鏈接和類別的給定Feeds對象。如何從列表中刪除特定的對象<T>

我的清單聲明:

public void addFeed(String link, String cat) { 
    linkAcategory.Add(new feed(link, cat)); 
} 

的附加功能:

public void addFeed(String link, String cat) { 
    linkAcategory.Add(new feed(link, cat)); 
} 

這是不工作,但刪除功能顯示了我想要做的事:

public void removeFeed(String link, String cat) { 
    linkAcategory.Remove(new feed(link,cat)); 
} 

我希望我能在這裏得到任何有價值的幫助。 在此先感謝。

+0

是鏈接和貓你的飼料對象的公共屬性? –

回答

7

假設T類型的對象有鏈接,貓性:

linkAcategory.RemoveAll(x=>x.link==link && x.cat==cat); 
+0

我不認爲這是如何工作。我的印象是你通過了一個珍藏集,除了這個集合的元素被排除在外。你確定Except有一個與lambda一起工作的重載嗎? – failedprogramming

+0

我無法像那樣工作。所以我想這不起作用? –

+0

你是對的,你需要實現一個擴展方法來工作,我的壞,我指的是它(由我公司的框架實現),RemoveAll應該按預期工作。更多關於在這裏添加lambda比較器的信息:http://stackoverflow.com/questions/6277760/can-i-use-linqs-except-with-a-lambda-expression-comparer –

0

列表對象給你三種方法來刪除它的元素。

  1. 刪除所有元素由拉姆達條件

  2. 由索引刪除特定元件

  3. 本身

例如刪除特定元素:

List<int> myList = new List<int>() 
      { 
       2, 
       1, 
       3, 
       1 
      }; 

myList.Remove(1);// Delete 1-element from the index 1 
myList.RemoveAt(0);// Delete 2-element from the index 0 
myList.RemoveAll(x => x == 1);// Delete all elements that equal to 1 
0

順便說一下,您的removeFeed方法被編寫,您的Feed類應該覆蓋Equals方法。沿線的東西:

public class Feed 
    { 
     private string link; 
     private string cat; 

     … 

     public override bool Equals(object obj) 
     { 
      if (obj == null) return false; 

      var other = obj as Feed; 
      if (other == null) return false; 

      return other.link == this.link && other.cat == this.cat; 
     } 
    } 

這是因爲Remove method of List uses the Equals方法的元素。

當您想要將某些屬性保留爲私有時,您可以選擇這種方法。這樣調用類唯一需要知道的就是Equals方法。它不必知道確定平等的屬性。