在C#中列出<T> .Distinct() - EqualityComparer的多个标准?

Bha*_*kar 5 c# list distinct

我有一组对象,每个对象都有几个属性.我经常需要获取此集合中许多属性的不同值列表.如果我在这种类型上实现IEqualityComparer,它给了我一个标准来获取集合中的不同对象.如何在此系列的多个条件上调用Distinct?

例如 ,

  class Product {
    string name ;
    string code ;
    string supplier ;
//etc 
}
Run Code Online (Sandbox Code Playgroud)

想象一下这样的产品对象列表.有时候,我希望在列表中获得不同名称的列表,并在某个时间列出不同供应商的列表.如果我在这些产品的列表上调用Distinct,基于IEqualityComparer的实现方式,它将始终使用相同的标准,这不符合我的目的.

Jon*_*eet 14

只需IEqualityComparer为不同的呼叫提供不同的实现Distinct.注意之间的差异IEquatableIEqualityComparer-通常类型应该没有实现IEqualityComparer为自己(这样Product就不会实现IEqualityComparer<Product>).您将拥有不同的实现,例如ProductNameComparer,ProductCodeComparer等.

但是,另一种方法是DistinctByMoreLINQ中使用

var distinctProducts = products.DistinctBy(p => p.name);
Run Code Online (Sandbox Code Playgroud)


Han*_*ant 6

您可以使用接受IEqualityComparer参数的Distinct()重载.