Condividi tramite


Generare override del metodo Equals e GetHashCode in Visual Studio

Questa generazione di codice si applica a:

  • C#

Che cosa: Consente di generare metodi Equals e GetHashCode .

Quando: Generare queste sostituzioni quando si dispone di un tipo che deve essere confrontato da uno o più campi, anziché dalla posizione dell'oggetto in memoria.

Perché:

  • Se si implementa un tipo valore, è consigliabile eseguire l'override del metodo Equals . È possibile migliorare le prestazioni rispetto all'implementazione predefinita del metodo Equals in ValueType quando si esegue questa operazione.

  • Se si implementa un tipo riferimento, è consigliabile eseguire l'override del metodo Equals se il tipo è simile a un tipo di base, ad esempio Point, String, BigNumber e così via.

  • Eseguire l'override del metodo GetHashCode per consentire a un tipo di funzionare correttamente in una tabella hash. Altre indicazioni sugli operatori di uguaglianza.

Guida pratica

  1. Posizionare il cursore in un punto qualsiasi sulla riga della dichiarazione di tipo.

    public class ImaginaryNumber
    {
        public double RealNumber { get; set; }
        public double ImaginaryUnit { get; set; }
    }
    

    Il codice dovrebbe essere simile allo screenshot seguente:

    Screenshot del codice evidenziato in cui applicare il metodo generato

    Suggerimento

    Non fare doppio clic su seleziona il nome del tipo oppure l'opzione di menu non sarà disponibile. Posizionare il cursore da qualche parte sulla linea.

  2. Scegliere quindi una delle azioni seguenti:

    • Premere CTRL+per attivare il menu Azioni rapide e refactoring.

    • Fare clic con il pulsante destro del mouse e selezionare il menu Azioni rapide e refactoring .

    • Fare clic sullo screenshot dell'icona del cacciavite azioni rapide in Visual Studio icona visualizzata nel margine sinistro.

  3. Nel menu a discesa selezionare Genera equals(oggetto) o Genera uguale a e GetHashCode.

    Screenshot del menu a discesa Genera sostituzioni

  4. Nella finestra di dialogo Seleziona membri selezionare i membri per cui si desidera generare i metodi:

    Finestra di dialogo Genera sostituzioni

    Suggerimento

    È anche possibile scegliere di generare operatori da questa finestra di dialogo usando la casella di controllo nella parte inferiore della finestra di dialogo.

    I Equals metodi e GetHashCode vengono generati con implementazioni predefinite, come illustrato nel codice seguente:

    public class ImaginaryNumber : IEquatable<ImaginaryNumber>
    {
        public double RealNumber { get; set; }
        public double ImaginaryUnit { get; set; }
    
        public override bool Equals(object obj)
        {
            return Equals(obj as ImaginaryNumber);
        }
    
        public bool Equals(ImaginaryNumber other)
        {
            return other != null &&
                   RealNumber == other.RealNumber &&
                   ImaginaryUnit == other.ImaginaryUnit;
        }
    
        public override int GetHashCode()
        {
            return HashCode.Combine(RealNumber, ImaginaryUnit);
        }
    }
    

    Il codice dovrebbe essere simile allo screenshot seguente:

    Screenshot del risultato del metodo generato

Vedere anche