Construtor de EqualityComparer

Tango.Linq.EqualityComparerBuilder<T>

Esta classe implementa a interface IEqualityComparer<T> e tem o objetivo principal prover um método de criação para objetos concretos que implementam esta interface de comparação.

Com isso é possível utilizar métodos como o Distinct do namespace System.Linq de forma dinâmica e realizando qualquer tipo de comparação, mesmo entre objetos do mesmo tipo.

Caso a interface fosse implementada diretamente na classe que será comparada, haveria apenas uma de forma de realizar uma comparação entre objetos desta classe.

Com esta implementação torna-se possível implementar comparações genéricas.

Propriedades

Métodos

Como Usar

Para criar uma nova instância de um comparador basta utilizar o método estático Create informando as funções que devem ser utilizadas na comparação do objeto.

Veja o exemplo a seguir:

class Product
{
   public int Id { get; set; }
   public string Description { get; set; }
}

Func<Product, Product, bool> compareProducts = 
      (product1, product2) => product1.Id == product2.Id;

Func<Product, int> getHashCodeProduct =
      product => product.Id.GetHashCode();

var comparer = 
    EqualityComparerBuilder<Product>.Create(
        compareProducts, 
        getHashCodeProduct);

IEnumerable<Product> products = GetProducts();
products.Distinct(comparer);

No exemplo anterior, o método Distinct não levará mais em conta a refêrencia do objeto Product, mas sim as comparações feitas através do objeto comparer.

Você também pode informar os métodos anônimos diretamente no parâmetro do método Create:

class Product
{
   public int Id { get; set; }
   public string Description { get; set; }
}
IEnumerable<Product> products = GetProducts();
products.Distinct(
    EqualityComparerBuilder<Product>.Create(
            (product1, product2) => product1.Id == product2.Id, 
            product => product.Id.GetHashCode());
);

Last updated