Partilhar via


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.

Consulte também