手动从集合中删除项与使用 Enumerable.C# 除外
本文关键字:Enumerable 除外 集合 删除 | 更新日期: 2023-09-27 18:21:42
要使用 Except 方法从自定义对象列表中删除对象,您需要在对象上实现 IEqualityComparer。但是,仅仅删除正常 foreach 循环中的对象不好吗?
我了解IEqualityComparer和使用Except 的概念,但由于某种原因我无法让它工作,所以我只是手动删除了这些项目。这被认为是糟糕的编程吗?
编辑:使用手动方式 id 必须覆盖 Equals 和 GetHashcode 污染我的视图模型 - 我想这很糟糕吗?
通常,应避免在枚举时对集合进行更改。
我不完全确定您最初的问题是什么,或者为什么您需要以这种方式删除元素,但是您使问题过于复杂。如果我理解正确,并且您实际上使用的是 T 是自定义类型的List<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
可枚举。问题除外