2014-04-06 61 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方法。它不必知道确定平等的属性。