有没有办法使用ReSharper自动生成GetHashCode和Equals?

Sam*_*lle 36 .net resharper equals hashcode visual-studio

在eclipse中,当我使用Java进行编码时,有一个功能可以自动生成基本,高效且无错误的实现,hashCode()并且equals()不会消耗脑力.

是否在Visual Studio或ReSharper中内置了类似的功能?

svi*_*ick 56

是的,Resharper可以做到这一点.将光标放在您的类型中,打开"生成代码"菜单(Alt+ Ins取决于设置或Resharper - >编辑 - >生成代码),然后选择"Equality members":

生成代码菜单

这将打开一个窗口,您可以在其中选择用于相等的成员,以及有关生成的代码的一些选项(例如,您的类型应该实现IEquatable<T>):

生成平等成员窗口

如果您从一个具有两个属性的简单类型开始:

class Person
{
    public string FirstName { get; private set; }
    public string LastName { get; private set; }
}
Run Code Online (Sandbox Code Playgroud)

然后生成的代码可能类似于:

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);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)


Iga*_*and 5

既然你问 Visual Studio 是否也可以做到这一点:从 XI.2017 开始,它最终可以生成一些有用的东西。

在类中使用ctr+.并选择“Generate Equals and GetHashCode”

/sf/answers/3390938001/