手动删除集合中的项目与使用Enumerable.Except C#

时间:2014-09-13 15:23:17

标签: c# linq collections equality

要使用Except方法从自定义对象列表中删除对象,需要在对象上实现IEqualityComparer。但是在正常的foreach循环中移除对象是不是很糟糕?

我理解IEqualityComparer的概念并使用Except,但由于某种原因我无法使其工作,所以我只是手动删除了这些项目。这被认为是错误的编程吗?

编辑:使用手动方式id必须覆盖Equals和GetHashcode污染我的视图模型 - 我想这很糟糕?

1 个答案:

答案 0 :(得分:1)

通常,应该避免在枚举时对集合进行更改。

我不是完全确定您的原始问题是什么,或者为什么需要以这种方式删除元素,但是您过度复杂化了问题。如果我理解正确,并且您实际上使用的是List<T>,其中T是自定义类型。如果是这种情况,那么只需使用LINQ查询从列表中获取所需的值。

var newList = oldList.Where(x => x.PropertyName != unwantedValue);

您可以使用Enumerable.Except,但应注意Enumerable.Except会返回设置,也就是说,不允许重复值。

另外,应该注意的是,据我所知,覆盖.Equals.GetHashCode不会污染视图模型。

来源:

http://msdn.microsoft.com/en-us/library/vstudio/bb336390(v=vs.100).aspx

Enumerable.Except Problem