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.
Confira também
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.
Mateus Sotelo Menezes |