42

Eclipse では、Java でコードを作成するときに、基本的で効率的でバグのない実装を自動生成する機能があり、頭脳のパワーを消費することはhashCode()ありません。equals()

Visual Studio または ReSharper に組み込まれている同様の機能はありますか?

4

4 に答える 4

61

はい、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);
        }
    }
}
于 2013-02-01T18:31:06.600 に答える