Partilhar via


CA1067: Substituir o método Equals ao implementar IEquatable

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.

Consulte também