CA1067: Substituir igual ao implementar o IEquatable
Property | valor |
---|---|
ID da regra | CA1067 |
Título | Substituir igual ao implementar o IEquatable |
Categoria | Desenho |
A correção está quebrando ou não quebrando | Sem quebra |
Habilitado por padrão no .NET 8 | Como sugestão |
Motivo
Um tipo implementa , mas não substitui Equals o IEquatable<T>método.
Descrição da regra
Uma interface de implementação IEquatable<T> de tipo indica que suporta a comparação de duas instâncias do tipo para igualdade. Você também deve substituir as implementações de classe base e GetHashCode() métodos para Equals que seu comportamento seja consistente com o System.IEquatable<T>.Equals da implementação. Aceda aqui para obter mais detalhes.
Sua Equals implementação deve retornar resultados consistentes com System.IEquatable<T>.Equals a implementação.
Como corrigir violações
Para corrigir uma violação, substitua-a Equals e implemente-a invocando a System.IEquatable<T>.Equals implementação. 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.