Skip to content

Latest commit

 

History

History
101 lines (69 loc) · 3.59 KB

generate-equals-gethashcode-methods.md

File metadata and controls

101 lines (69 loc) · 3.59 KB
title description ms.date ms.topic author ms.author manager ms.subservice
Generate C# Equals and GetHashCode Method Overrides
Learn how to use the Quick Actions and Refactorings menu to generate Equals and GetHashCode methods.
03/08/2021
reference
Mikejo5000
mikejo
mijacobs
general-ide

Generate Equals and GetHashCode method overrides in Visual Studio

This code generation applies to:

  • C#

What: Lets you generate Equals and GetHashCode methods.

When: Generate these overrides when you have a type that should be compared by one or more fields, instead of by object location in memory.

Why:

  • If you're implementing a value type, you should consider overriding the Equals method. You can gain increased performance over the default implementation of the Equals method on ValueType when you do so.

  • If you're implementing a reference type, you should consider overriding the Equals method if your type looks like a base type, such as Point, String, BigNumber, and so on.

  • Override the GetHashCode method to allow a type to work correctly in a hash table. Read more guidance on equality operators.

How-to

  1. Place your cursor somewhere on the line of your type declaration.

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

    Your code should look similar to the following screenshot:

    Screenshot of highlighted code on which to apply the generated method

    [!TIP] Do not double-click select the type name, or the menu option won't be available. Just place the cursor somewhere on the line.

  2. Next, choose one of the following actions:

    • Press Ctrl+. to trigger the Quick Actions and Refactorings menu.

    • Right-click and select the Quick Actions and Refactorings menu.

    • Click the Screenshot of the Quick Actions screwdriver icon in Visual Studio icon that appears in the left margin.

  3. In the drop-down menu, select Generate Equals(object) or Generate Equals and GetHashCode.

    Screenshot of the Generate Overrides drop-down menu

  4. In the Pick members dialog box, select the members you want to generate the methods for:

    Generate overrides dialog

    [!TIP] You can also choose to generate operators from this dialog by using the checkbox near the bottom of the dialog.

    The Equals and GetHashCode methods are generated with default implementations, as shown in the following code:

    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);
        }
    }

    Your code should look similar to the following screenshot:

    Screenshot of the result of the generated method

See also