在eclipse中,当我用Java编写代码时,有一个功能可以自动生成一个基本的、高效的、无错误的实现,hashCode()
并且equals()
不消耗脑力。
Visual Studio 或 ReSharper 中是否内置了类似的功能?
在eclipse中,当我用Java编写代码时,有一个功能可以自动生成一个基本的、高效的、无错误的实现,hashCode()
并且equals()
不消耗脑力。
Visual Studio 或 ReSharper 中是否内置了类似的功能?
是的,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 Studio 是否也可以这样做:自 XI.2017 以来,它最终可以生成一些有用的东西。
在类中使用ctr+.并选择“生成 Equals 和 GetHashCode”
使用 Visual Studio 本身的真正解决方案。有一个内置机制,可以生成这些函数:
您可以使用 C# IEquitable 接口,它会自动为您生成这些方法。