42

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

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

4

4 回答 4

61

是的,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);
        }
    }
}
于 2013-02-01T18:31:06.600 回答
6

既然您问 Visual Studio 是否也可以这样做:自 XI.2017 以来,它最终可以生成一些有用的东西。

在类中使用ctr+.并选择“生成 Equals 和 GetHashCode”

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

于 2018-01-25T11:57:54.693 回答
2

使用 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

于 2020-03-13T18:04:53.370 回答
0

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

于 2018-08-30T23:17:35.587 回答