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

后端 未结 4 801
独厮守ぢ
独厮守ぢ 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):

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

提交回复
热议问题