Condividi tramite


CA1067: Eseguire l'override di Equals durante l'implementazione di IEquatable

Proprietà valore
ID regola CA1067
Titolo Esegue l'override di Equals quando si implementa IEquatable
Categoria Progettazione
La correzione causa un'interruzione o meno Non rompente
Abilitato per impostazione predefinita in .NET 10 Come suggerimento
Linguaggi applicabili C# e Visual Basic

Causa

Un tipo implementa IEquatable<T>, ma non esegue l'override del metodo Equals.

Descrizione regola

Un tipo che implementa l'interfaccia IEquatable<T> indica che supporta il confronto di due istanze del tipo per determinare l'uguaglianza. È anche necessario eseguire l'override delle implementazioni della classe base dei metodi Equals e GetHashCode() in modo che il loro comportamento sia coerente con quello dell'implementazione System.IEquatable<T>.Equals. Per altre informazioni, vedere Note per gli implementatori.

L'implementazione Equals deve restituire risultati coerenti con l'implementazione System.IEquatable<T>.Equals .

Come correggere le violazioni

Per correggere una violazione, eseguire l'override di Equals e implementarlo richiamando l'implementazione di System.IEquatable<T>.Equals. Ad esempio, i due frammenti di codice seguenti mostrano una violazione della regola e come risolverli:

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 eliminare gli avvisi

Non sopprimere le violazioni di questa regola.

Vedi anche