Tango-br
  • Introduction
  • Começando
    • Índice
    • Recado do desenvolvedor
    • O que é a Tango?
    • Por onde começar?
  • Instalação
    • Instalação via NuGet
    • Instalação manual
  • Conceitos
    • Introdução
    • Utilizando comparação de padrões (Pattern Matching)
    • Valores Opcionais
    • Valores "Ou um ou outro" (Either)
    • Saindo do void para o Unit
    • Delegates Func e Action
    • Utilizando operações encadeadas com processos contínuos
    • Currying e Aplicação Parcial
  • Funcional
    • Introdução
    • Currying
    • Aplicação Parcial
    • Extensões
    • Cast Rápido para Delegates
  • Operações
    • Introdução
    • Operações com Booleans
    • Operações com Inteiros
    • Operações com Decimais
    • Operações com Doubles
    • Operações com Strings
  • Tipos
    • Introdução
    • Unit
    • Option<T>
    • Either<TLeft, TRight>
    • Continuation<TFail, TSuccess>
  • Módulos
    • Introdução
    • Option
      • Apply
      • AsEnumerable
      • Bind
      • Count
      • Exists
      • Filter
      • Fold
      • FoldBack
      • Iterate
      • Map
      • OfNullable
      • ToArray
      • ToList
      • ToNullable
    • Either
      • Exists
      • Iterate
      • Fold
      • FoldBack
      • Map
      • Swap
      • ToTuple
    • Continuation
      • AsContinuation
      • Resolve
      • Reject
      • All
    • Collection
      • Append
      • Choose
      • ChunkBySize
      • Collect
      • CompareWith
      • CountBy
      • Concat
      • Distinct
      • Empty
      • Exists
      • Exists2
      • Filter
      • FindIndex
      • Fold
      • Fold2
      • FoldBack
      • FoldBack2
      • ForAll
      • ForAll2
      • ForAll3
      • Head
      • HeadAndTailEnd
      • Range
      • Generate
      • Initialize
      • Iterate
      • Iterate2
      • IterateIndexed
      • IterateIndexed2
      • Map
      • Map2
      • Map3
      • MapIndexed
      • MapIndexed2
      • MapIndexed3
      • Partition
      • Permute
      • Pick
      • Reduce
      • ReduceBack
      • Replicate
      • Scan
      • Scan2
      • ScanBack
      • ScanBack2
      • Tail
      • TryFind
      • TryPick
      • Unzip
      • Unzip3
      • Zip
      • Zip3
  • Extensões
    • Introdução
    • Extensões para Enum
    • Construtor de EqualityComparer
    • Módulos como extensão
Powered by GitBook
On this page
  • Propriedades
  • Métodos
  • Como Usar

Was this helpful?

  1. Extensões

Construtor de EqualityComparer

PreviousExtensões para EnumNextMódulos como extensão

Last updated 5 years ago

Was this helpful?

Esta classe implementa a interface 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 do namespace 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

Nome

Tipo

Descrição

Comparer

Func<T, T, bool>

Propriedade para armazenar o método que será utilizado para realizar a comparação entre os objetos.

HashCodeGetter

Func<T, int>

Propriedade para armazenar o método que será utilizado para realizar a operação para obter o HashCode do objeto.

Métodos

Nome

Parâmetros

Retorno

Descrição

Create

Func<T, T, bool> comparer

Func<T, int> hashCodeGetter

EqualityComparerBuilder

Cria uma nova instância deste objeto encapsulando as funções informadas no parâmetro para executar os métodos da interface IEqualityComparer<T>.

Equals

T x

T y

bool

Método da interface IEqualityComparer<T>.

GetHashCode

T obj

int

Método da interface IEqualityComparer<T>.

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());
);
Tango.Linq.EqualityComparerBuilder<T>
IEqualityComparer<T>
Distinct
System.Linq