删除另一个列表中的项目

时间:2013-12-09 19:51:46

标签: c# asp.net

我有两个列表,它们被命名为:currentItems和newItems。 newItems包含在currentItems中找到的项目,我在输出列表之前尝试这些项目。

我做了一些搜索,我尝试过使用:

var newList = newItems.Except(CurrentItems).ToList();

但是当我查看输出时,我仍然会在列表中找到来自currentItems的项目。当我遇到这个问题时,我找到了这个例子:

Quickest way to compare two List<>

这与我想要实现的相似,但问题的所有答案对我都不起作用。

我尝试过使用:

List<ListItem> newList = newItems.Union(CurrentItems).ToList();

但我相信我在错误的情况下使用它,因为我试图从列表中完全删除该项目。

我也试过在两个循环中循环,但我不相信它会尽可能高效。

在第一个例子中,我可能做错了吗?或者有不同的方法来实现我的目标?

1 个答案:

答案 0 :(得分:2)

IEnumerable.Except将执行您想要的操作,但它使用默认的相等比较器。对于自定义对象,您需要实现EqualsGetHashCode

另请注意,如果newItems具有重复值,IEnumerable.Except也会在您的列表中执行不同

EDIT2:您需要一个比较ListItem的相等比较器,我相信。

您需要传入自定义比较器,该比较器仅比较Value的{​​{1}}属性。

ListItem

自定义相等比较器就在这里......

var newList = newItems.Except(currentItems, new ListItemValueComparer());