2013-02-01 29 views
34

Trong nhật thực, khi tôi viết mã bằng Java, có một tính năng tự động tạo ra việc triển khai cơ bản, hiệu quả và không bị lỗi hashCode()equals() mà không cần tốn điện não.Có cách nào để tự động tạo GetHashCode và Equals bằng ReSharper không?

Có tính năng tương tự được tích hợp trong Visual Studio hoặc trong ReSharper không?

+0

Chỉ cần loại bằng và nhấn Tab. –

Trả lời

51

Có, Resharper có thể làm điều đó. Với con trỏ bên trong loại bạn, hãy mở “Tạo mã” menu (Alt + Ins tùy thuộc vào cài đặt hoặc Resharper -> Edit -> Tạo Mã), và chọn “thành viên bình đẳng”:

Generate code menu

này mở ra một cửa sổ nơi bạn có thể chọn những thành viên được sử dụng cho bình đẳng, cùng với một số tùy chọn về các mã được tạo (ví dụ nên loại của bạn thực hiện IEquatable<T>):

Generate equality members window

Nếu bạn bắt đầu với một kiểu đơn giản với hai thuộc tính:

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

Sau đó, các mã được tạo có thể giống như thế:

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

Vì bạn hỏi nếu cũng Visual Studio có thể làm điều đó: kể từ XI.2017 nó cuối cùng có thể tạo ra một cái gì đó hữu ích.

Sử dụng ctr + . bên trong lớp và chọn "Generate Equals và GetHashCode"

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

Các vấn đề liên quan