Dot-Net

有沒有辦法使用 ReSharper 自動生成 GetHashCode 和 Equals?

  • February 1, 2013

在 eclipse 中,當我用 Java 編寫程式碼時,有一個功能可以自動生成一個基本的、高效的、無錯誤的實現,hashCode()並且equals()不消耗腦力。

Visual Studio 或 ReSharper 中是否內置了類似的功能?

是的,Resharper 可以做到這一點。將游標放在您的類型中,打開“生成程式碼”菜單(Alt+Ins取決於設置或Resharper -> 編輯 -> 生成程式碼),然後選擇“平等成員”:

生成程式碼菜單

這將打開一個視窗,您可以在其中選擇用於相等的成員,以及有關生成程式碼的一些選項(例如,您的類型是否應該實現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);
       }
   }
}

引用自:https://stackoverflow.com/questions/14652567