在eclipse中,当我使用Java编写代码时,有一个功能可以自动生成hashCode()
和equals()
的基本,高效且无错误的实现,而不会消耗大脑的力量。
是否在Visual Studio或ReSharper中内置了类似的功能?
答案 0 :(得分:55)
是的,Resharper可以做到这一点。将光标放在您的类型中,打开“生成代码”菜单( Alt + Ins ,具体取决于设置或 Resharper - >编辑 - >生成代码),并选择“Equality members”:
这将打开一个窗口,您可以在其中选择用于相等的成员,以及有关生成的代码的一些选项(例如,如果您的类型实现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);
}
}
}
答案 1 :(得分:2)
使用Visual Studio本身的真正解决方案。 有一个内置的机制,可以生成以下功能:
答案 2 :(得分:1)
因为您询问Visual Studio是否也可以这样做: 自XI.2017以来,它最终可以产生一些有用的东西。
在类中使用 ctr + 。并选择“Generate Equals and GetHashCode”
答案 3 :(得分:0)
您可以使用C#IEquitable接口,它将自动为您生成这些方法。