2013-02-01 5 views
34

In Eclipse, wenn ich in Java code, gibt es eine Funktion, um automatisch eine grundlegende, effiziente und fehlerfreie Implementierung von hashCode() und equals() zu generieren, ohne Intelligenz zu verbrauchen.Gibt es eine Möglichkeit, GetHashCode und Equals mit ReSharper automatisch zu generieren?

Gibt es eine ähnliche Funktion, die entweder in Visual Studio oder in ReSharper integriert ist?

+0

Gerade Typ entspricht und drücken Sie die Tabulatortaste. –

Antwort

51

Ja, Resharper kann das tun. Mit Cursor in Ihrem Typ, öffnen Sie den „Code generieren“ -Menü (Alt + Ins je nach Einstellungen oder ReSharper -> Bearbeiten -> Code generieren), und wählen Sie „Equality-Mitglieder“:

Generate code menu

Es öffnet sich ein Fenster, in dem Sie festlegen, welche Elemente verwendet werden für die Gleichstellung, zusammen mit einigen Optionen über den generierten Code (zB sollte IEquatable<T> Ihre Art implementieren) auswählen:

Generate equality members window

Wenn Sie mit einem einfachen Typ mit zwei Eigenschaften beginnen:

class Person 
{ 
    public string FirstName { get; private set; } 
    public string LastName { get; private set; } 
} 

Dann wird der generierte Code wie etwas aussehen:

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); 
     } 
    } 
} 
0

Da Sie, wenn auch Visual Studio fragte das tun können: seit XI.2017 kann es endlich etwas Nützliches generieren.

Mit ctr + . innerhalb der Klasse und wählen Sie "Gene Equals und GetHashCode"

Siehe https://stackoverflow.com/a/48441971/4547594

Verwandte Themen