Is there a way to auto-generate GetHashCode and Equals with ReSharper?

后端 未结 4 810
独厮守ぢ
独厮守ぢ 2021-02-05 00:48

In eclipse, when I code in Java, there is a feature to auto-generate a basic, efficient, and bug free implementation of hashCode() and equals() without

相关标签:
4条回答
  • 2021-02-05 01:05

    Yes, Resharper can do that. With cursor inside your type, open the “Generate code” menu (Alt+Ins depending on settings or Resharper -> Edit -> Generate Code), and select “Equality members”:

    Generate code menu

    This opens a window where you can select which members are used for equality, along with some options about the generated code (e.g. should your type implement IEquatable<T>):

    Generate equality members window

    If you start with a simple type with two properties:

    class Person
    {
        public string FirstName { get; private set; }
        public string LastName { get; private set; }
    }
    

    Then the generated code may look something like:

    class Person : IEquatable<Person>
    {
        public string FirstName { get; private set; }
        public string LastName { get; private set; }
    
        public bool Equals(Person other)
        {
            if (ReferenceEquals(null, other))
                return false;
            if (ReferenceEquals(this, other))
                return true;
            return string.Equals(FirstName, other.FirstName) && string.Equals(LastName, other.LastName);
        }
    
        public override bool Equals(object obj)
        {
            if (ReferenceEquals(null, obj))
                return false;
            if (ReferenceEquals(this, obj))
                return true;
            if (obj.GetType() != this.GetType())
                return false;
            return Equals((Person)obj);
        }
    
        public override int GetHashCode()
        {
            unchecked
            {
                return ((FirstName != null ? FirstName.GetHashCode() : 0) * 397) ^ (LastName != null ? LastName.GetHashCode() : 0);
            }
        }
    }
    
    0 讨论(0)
  • 2021-02-05 01:22

    You can use C# IEquitable interface which will auto generate those methods for you.

    0 讨论(0)
  • 2021-02-05 01:23

    Since you asked if also Visual Studio can do that: since XI.2017 it finaly can generate something useful.

    Using ctr+. inside class and choosing "Generate Equals and GetHashCode"

    See https://stackoverflow.com/a/48441971/4547594

    0 讨论(0)
  • 2021-02-05 01:28

    The Real Solution to use the Visual Studio itself. There is a built in mechanism, which can generate these functions:

    1. Place your cursor somewhere on the line of your type declaration.
    2. Click the screwdriver icon that appears in the left margin.
    3. Select Generate Equals(object) or Generate Equals and GetHashCode from the drop-down menu.

    Description with pictures: https://docs.microsoft.com/en-us/visualstudio/ide/reference/generate-equals-gethashcode-methods?view=vs-2019#how-to

    0 讨论(0)
提交回复
热议问题