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)
既然你问 Visual Studio 是否也可以做到这一点:从 XI.2017 开始,它最终可以生成一些有用的东西。
在类中使用ctr+.并选择“Generate Equals and GetHashCode”
| 归档时间: |
|
| 查看次数: |
12120 次 |
| 最近记录: |