我有两个列表,它们被命名为:currentItems和newItems。 newItems包含在currentItems中找到的项目,我在输出列表之前尝试这些项目。
我做了一些搜索,我尝试过使用:
var newList = newItems.Except(CurrentItems).ToList();
但是当我查看输出时,我仍然会在列表中找到来自currentItems的项目。当我遇到这个问题时,我找到了这个例子:
Quickest way to compare two List<>
这与我想要实现的相似,但问题的所有答案对我都不起作用。
我尝试过使用:
List<ListItem> newList = newItems.Union(CurrentItems).ToList();
但我相信我在错误的情况下使用它,因为我试图从列表中完全删除该项目。
我也试过在两个循环中循环,但我不相信它会尽可能高效。
在第一个例子中,我可能做错了吗?或者有不同的方法来实现我的目标?
答案 0 :(得分:2)
IEnumerable.Except
将执行您想要的操作,但它使用默认的相等比较器。对于自定义对象,您需要实现Equals
和GetHashCode
另请注意,如果newItems具有重复值,IEnumerable.Except
也会在您的列表中执行不同。
EDIT2:您需要一个比较ListItem的相等比较器,我相信。
您需要传入自定义比较器,该比较器仅比较Value
的{{1}}属性。
ListItem
自定义相等比较器就在这里......
var newList = newItems.Except(currentItems, new ListItemValueComparer());