Eclipse では、Java でコードを作成するときに、基本的で効率的でバグのない実装を自動生成する機能があり、頭脳のパワーを消費することはhashCode()
ありません。equals()
Visual Studio または ReSharper に組み込まれている同様の機能はありますか?
Eclipse では、Java でコードを作成するときに、基本的で効率的でバグのない実装を自動生成する機能があり、頭脳のパワーを消費することはhashCode()
ありません。equals()
Visual Studio または ReSharper に組み込まれている同様の機能はありますか?
はい、Resharper はそれを行うことができます。タイプ内にカーソルを置いて、「コードの生成」メニューを開き ( Alt+Ins設定に応じて、またはResharper -> 編集 -> コードの生成)、「等しいメンバー」を選択します。
これにより、生成されたコードに関するいくつかのオプションとともに、等価に使用されるメンバーを選択できるウィンドウが開きます (たとえば、タイプが実装されている必要がありますIEquatable<T>
)。
2 つのプロパティを持つ単純な型から始める場合:
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);
}
}
}