[英]Removing items found in another list
我有两个列表,它们分别命名为:currentItems和newItems。 newItems包含在currentItems中找到的项目,在输出列表之前,我尝试使用这些项目。
我做了一些搜索,并尝试使用:
var newList = newItems.Except(CurrentItems).ToList();
但是当我查看输出时,仍然可以从列表中的currentItems中找到项目。 当我遇到这个问题时,我找到了这个例子:
这与我要达到的目标类似,但问题的所有答案均不适用于我。
我尝试使用:
List<ListItem> newList = newItems.Union(CurrentItems).ToList();
但是我认为我在错误的情况下使用了它,因为我试图将其从列表中完全删除。
我也尝试过在两个循环之间循环,但是我不相信这样做会尽可能高效。
在第一个示例中,我可能做错了什么? 还是有其他方法可以实现我的目标?
IEnumerable.Except
将做您想要的,但是它使用默认的相等比较器。 对于自定义对象,您将需要实现Equals
和GetHashCode
还要注意,如果newItems具有重复的值IEnumerable.Except
也会在您的列表上做不同的事情。
EDIT2:您需要一个相等比较器来比较ListItem的可信度。
您需要传入一个自定义比较器,该比较器仅比较ListItem
的Value
属性。
var newList = newItems.Except(currentItems, new ListItemValueComparer());
自定义相等比较器在这里...
class ListItemValueComparer : IEqualityComparer<ListItem>
{
public bool Equals(ListItem x, ListItem y)
{
return x.Value.Equals(y.Value);
}
public int GetHashCode(ListItem obj)
{
return obj.Value.GetHashCode();
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.