要使用Except方法从自定义对象列表中删除对象,需要在对象上实现IEqualityComparer。但是在正常的foreach循环中移除对象是不是很糟糕?
我理解IEqualityComparer的概念并使用Except,但由于某种原因我无法使其工作,所以我只是手动删除了这些项目。这被认为是错误的编程吗?
编辑:使用手动方式id必须覆盖Equals和GetHashcode污染我的视图模型 - 我想这很糟糕?
答案 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