Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
| Propriedade | valor |
|---|---|
| ID da regra | CA1067 |
| Título | Substituir o método Equals ao implementar IEquatable |
| Categoria | Desenho |
| A correção causa interrupção ou não | Ininterrupto |
| Habilitado por padrão no .NET 10 | Como sugestão |
| Línguas aplicáveis | C# e Visual Basic |
Motivo
Um tipo implementa IEquatable<T>, mas não substitui o método Equals.
Descrição da regra
Um tipo que implementa a interface IEquatable<T> indica que suporta a comparação de duas instâncias do tipo em termos de igualdade. Você também deve substituir as implementações dos métodos da classe base Equals e GetHashCode() para que seu comportamento seja consistente com o da implementação de System.IEquatable<T>.Equals. Para obter mais informações, consulte Notas para implementadores.
Sua Equals implementação deve retornar resultados consistentes com System.IEquatable<T>.Equals implementação.
Como corrigir violações
Para corrigir uma violação, substitua Equals e implemente-a invocando a implementação System.IEquatable<T>.Equals. Por exemplo, os dois trechos 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 reprima violações desta regra.