手动从集合中删除项与使用 Enumerable.C# 除外

本文关键字:Enumerable 除外 集合 删除 | 更新日期: 2023-09-27 18:21:42

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

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

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

手动从集合中删除项与使用 Enumerable.C# 除外

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

我不完全确定您最初的问题是什么,或者为什么您需要以这种方式删除元素,但是您使问题过于复杂。如果我理解正确,并且您实际上使用的是 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

可枚举。问题除外