【问题标题】:Is there a way to auto-generate GetHashCode and Equals with ReSharper?有没有办法使用 ReSharper 自动生成 GetHashCode 和 Equals?
【发布时间】:2013-02-01 18:17:31
【问题描述】:

在 Eclipse 中,当我使用 Java 编码时,有一个功能可以在不消耗脑力的情况下自动生成 hashCode()equals() 的基本、高效且无错误的实现。

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

【问题讨论】:

  • 只需键入 equals 并按 Tab。

标签: .net visual-studio resharper equals hashcode


【解决方案1】:

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

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

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

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

那么生成的代码可能类似于:

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

【讨论】:

  • Visual 工作室可以做到,无需 reSharper
【解决方案2】:

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

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

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

【讨论】:

    【解决方案3】:

    使用 Visual Studio 本身的真正解决方案。 有一个内置机制,可以生成这些函数:

    1. 将光标放在类型声明行的某处。
    2. 点击出现在左边距的螺丝刀图标。
    3. 从下拉菜单中选择 Generate Equals(object) 或 Generate Equals and GetHashCode。

    图片说明: https://docs.microsoft.com/en-us/visualstudio/ide/reference/generate-equals-gethashcode-methods?view=vs-2019#how-to

    【讨论】:

    • 如果您的类型正在实现某些东西(接口、基类等),您需要将光标 before ':' 放在类型声明中,否则将 'Generate Equals 和 GetHashCode ' 菜单选项不可用。我将光标放在我的类型名称旁边,然后才出现菜单选项。
    【解决方案4】:

    您可以使用 C# IEquitable 接口,它会自动为您生成这些方法。

    【讨论】:

    • 我想你提到了 IEquatable
    猜你喜欢
    • 2018-03-03
    • 1970-01-01
    • 2013-07-07
    • 1970-01-01
    • 1970-01-01
    • 2012-03-27
    • 2011-11-05
    • 2018-10-30
    • 2012-05-17
    相关资源
    最近更新 更多