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

Proprietà valore
ID regola CA1067
Title Esegue l'override di Equals quando si implementa IEquatable
Categoria Progettazione
La correzione causa un'interruzione o meno Non causa un'interruzione
Abilitato per impostazione predefinita in .NET 9 Come suggerimento

Causa

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

Descrizione regola

Un'interfaccia di implementazione IEquatable<T> del tipo indica che supporta il confronto di due istanze del tipo per l'uguaglianza. È anche necessario eseguire l'override delle implementazioni della classe base di e GetHashCode() dei Equals metodi in modo che il relativo comportamento sia coerente con quello dell'implementazioneSystem.IEquatable<T>.Equals. Per altri dettagli, vedere qui.

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

Come correggere le violazioni

Per correggere una violazione, eseguirne l'override e implementarla richiamando l'implementazione Equals 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 eliminare le violazioni di questa regola.

Vedi anche