我有一个对象集合,每个对象都有几个属性。我经常需要为该集合中的许多属性获取不同值的列表。如果我在此类型上实现 IEqualityComparer,它会为我提供一个获取集合中不同对象的单一标准。我如何才能根据此集合的多个条件调用 Distinct?
例如,
class Product {
string name ;
string code ;
string supplier ;
//etc
}
想象一下此类产品对象的列表。 有时,我想获得列表中不同名称的列表,而在其他时间,我想获得不同供应商的列表。等等 如果我根据 IEqualityComparer 的实现方式对这些产品的列表调用 Distinct,它将始终使用相同的标准,这不会达到我的目的。
最佳答案
只需提供不同的IEqualityComparer
对 Distinct
的不同调用的实现.注意 IEquatable
之间的区别和 IEqualityComparer
- 通常一个类型不应该实现 IEqualityComparer
为自己(所以 Product
不会实现 IEqualityComparer<Product>
)。您会有不同的实现,例如 ProductNameComparer、ProductCodeComparer 等。
但是,另一种选择是使用 DistinctBy
在 MoreLINQ
var distinctProducts = products.DistinctBy(p => p.name);
关于c# - C# 中的 List<T>.Distinct() - EqualityComparer 的多个条件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2730673/