Para uma comparação de propriedades

Os indexadores são como propriedades. Com exceção das diferenças mostradas na tabela a seguir, todas as regras definidas para acessadores de propriedade também se aplicam a acessadores de indexador.

Propriedade Indexador
Permite que os métodos sejam chamados como se fossem membros de dados públicos. Permite que elementos de uma coleção interna de um objeto sejam acessados usando uma notação de matriz no próprio objeto.
Acessado por meio de um nome simples. Acessado por meio de um índice.
Pode ser estático ou um membro de instância. Deve ser um membro da instância.
Um acessador get de uma propriedade não tem parâmetros. Um acessador get de um indexador tem a mesma lista de parâmetro formal que o indexador.
Um acessador set de uma propriedade contém o parâmetro implícito . Um acessador set de um indexador tem a mesma lista de parâmetro formal que o indexador, bem como o mesmo parâmetro de set.
Dá suporte a sintaxe reduzida com Propriedades Autoimplementadas. Dá suporte a membros aptos para expressão a fim de obter somente indexadores.

Confira também

  • Guia de programação C#
  • Indexadores
  • Propriedades

Nessa resposta no SO eu achei algo que é mais ou menos o que deseja.

Tem que pensar se compensar usar isto, tem que usar muito.

É mais lento e menos confiável. Talvez precise adaptar alguma coisa, quem sabe inverter a situação da lista para ignorar se na maior parte do tempo a lista a ignorar for grande demais.

Tem outras implicações, se mudar a estrutura do objeto pode mudar o comportamento deste método e dar resultados diferentes do que espera.

public static bool PublicInstancePropertiesEqual<T>(this T self, T to, params string[] ignore) where T : class { if (self != null && to != null) { var type = typeof(T); var ignoreList = new List<string>(ignore); var unequalProperties = from pi in type.GetProperties(BindingFlags.Public | BindingFlags.Instance) where !ignoreList.Contains(pi.Name) let selfValue = type.GetProperty(pi.Name).GetValue(self, null) let toValue = type.GetProperty(pi.Name).GetValue(to, null) where selfValue != toValue && (selfValue == null || !selfValue.Equals(toValue)) select selfValue; return !unequalProperties.Any(); } return self == to; }

Coloquei no GitHub para referência futura.

Para uma comparação de propriedades

Para uma comparação de propriedades

Para uma comparação de propriedades

Para uma comparação de propriedades

Para uma comparação de propriedades
Mateus Sotelo Menezes
  • Cite

    Download full-text