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.