Eclipseで、コードをJavaで実行すると、脳力を消費することなく、hashCode()
とequals()
という基本的で効率的でバグのない実装を自動的に生成する機能があります。ReSharperでGetHashCodeとEqualsを自動生成する方法はありますか?
Visual StudioやReSharperにも同様の機能が組み込まれていますか?
Eclipseで、コードをJavaで実行すると、脳力を消費することなく、hashCode()
とequals()
という基本的で効率的でバグのない実装を自動的に生成する機能があります。ReSharperでGetHashCodeとEqualsを自動生成する方法はありますか?
Visual StudioやReSharperにも同様の機能が組み込まれていますか?
はい、Resharperがそうすることができます。
:、および「平等のメンバー」を選択し、あなたのタイプの内側カーソルを使用すると、( - - > [編集]> [コードを生成する設定や ReSharperのに応じて、Altキー + イン)「コードを生成」メニューを開きこれは、(例えば、あなたのタイプはIEquatable<T>
を実装する必要があります)、生成されたコードについてのいくつかのオプションと一緒に、あなたが平等のために使用されているメンバーを選択できるウィンドウが開きます:
次の2つのプロパティを持つシンプルなタイプで起動した場合:また、Visual Studioはそれを行うことができれば、あなたが尋ねたので
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);
}
}
}
:
class Person
{
public string FirstName { get; private set; }
public string LastName { get; private set; }
}
その後、生成されたコードは次のように見えるかもしれませんXI.2017以来、最終的に有用なものを生成することができます。
使用ctr + です。クラスの内側と「に等しいとGetHashCodeメソッドを生成」を選択する
ジャストタイプが等しく、Tabキーを押しますを参照してください。 –