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
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”:
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>
):
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);
}
}
}
You can use C# IEquitable interface which will auto generate those methods for you.
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
The Real Solution to use the Visual Studio itself. There is a built in mechanism, which can generate these functions:
Description with pictures: https://docs.microsoft.com/en-us/visualstudio/ide/reference/generate-equals-gethashcode-methods?view=vs-2019#how-to