【问题标题】:How to remove a specific object from a List<T>如何从 List<T> 中删除特定对象
【发布时间】:2014-05-19 00:50:55
【问题描述】:

所以我创建了一个列表,其中存储了由链接和类别构成的 Feed 对象。现在我想删除具有特定链接和类别的给定 Feeds 对象。

我的名单声明:

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

我希望在这里能得到任何有价值的帮助。 提前致谢。

【问题讨论】:

  • 链接和 cat 都是 Feed 对象的公共属性吗?

标签: c# list oop object


【解决方案1】:

假设T对象有link和cat属性:

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

【讨论】:

  • 我不认为这就是除了工作的方式。我的印象是您将一个可枚举的集合传递给 except,并且该集合的元素被排除在外。你确定 except 有一个适用于 lambda 的重载吗?
  • 我无法让它像那样工作。所以我猜这不起作用?
  • 你说得对,你需要实现一个扩展方法让它像那样工作,我的错,我指的是它(由我公司的框架实现),RemoveAll 应该按预期工作尽管。有关在此处添加 lambda 比较器的更多信息:stackoverflow.com/questions/6277760/…
【解决方案2】:

List 对象为您提供了三种删除其元素的方法。

  1. 按 lambda 条件删除所有元素

  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

【讨论】:

    【解决方案3】:

    按照您的 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 方法。它不必知道确定相等性的属性。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-04-19
      • 1970-01-01
      • 2023-03-09
      • 1970-01-01
      • 2017-06-22
      • 1970-01-01
      • 2011-03-03
      • 1970-01-01
      相关资源
      最近更新 更多