CA1067: Substituir Equals ao implementar IEquatable
Property | Valor |
---|---|
ID da regra | CA1067 |
Título | Substituir Equals ao implementar IEquatable |
Categoria | Projetar |
Correção interruptiva ou sem interrupção | Sem interrupção |
Habilitado por padrão no .NET 9 | Como sugestão |
Causa
Um tipo implementa IEquatable<T>, mas não substitui o método Equals.
Descrição da regra
Uma interface de implementação de tipo IEquatable<T> indica que ela oferece suporte à comparação de duas instâncias do tipo para igualdade. Você também deve substituir as implementações de classe base dos métodos Equals e GetHashCode() para que seu comportamento seja consistente com o da implementação System.IEquatable<T>.Equals. Veja aqui para obter mais detalhes.
Sua implementação de Equals deve retornar resultados consistentes com a implementação de System.IEquatable<T>.Equals.
Como corrigir violações
Para corrigir uma violação, substitua Equals e implemente-o invocando a implementação System.IEquatable<T>.Equals. Por exemplo, os dois snippets de código a seguir mostram uma violação da regra e como corrigi-la:
using System;
public struct S : IEquatable<S>
{
private readonly int _value;
public S(int f)
{
_value = f;
}
public bool Equals(S other)
=> _value == other._value;
}
using System;
public struct S : IEquatable<S>
{
private readonly int _value;
public S(int f)
{
_value = f;
}
public bool Equals(S other)
=> _value == other._value;
public override bool Equals(object obj)
=> obj is S objS && Equals(objS);
public override int GetHashCode()
=> _value.GetHashCode();
}
Quando suprimir avisos
Não suprima as violações dessa regra.