2009-07-07 31 views
6

Tôi muốn biết cách hiệu quả nhất để so sánh hai thực thể cùng loại.Cách tốt nhất để so sánh hai thực thể khung thực thể là gì?

Một thực thể được tạo từ tệp xml bằng tay (ví dụ: cá thể mới và thuộc tính được đặt theo cách thủ công) và đối tượng kia được khôi phục từ ngữ cảnh đối tượng của tôi.

Tôi muốn biết liệu giá trị thuộc tính có giống nhau trong mỗi trường hợp hay không.

Suy nghĩ đầu tiên của tôi là tạo ra giá trị băm của các giá trị thuộc tính từ mỗi đối tượng và so sánh các băm, nhưng có thể có cách khác hoặc được xây dựng theo cách?

Mọi đề xuất đều được hoan nghênh.

Rất cám ơn,

James

CẬP NHẬT

tôi đến với điều này:

static class ObjectComparator<T> 
{ 
    static bool CompareProperties(T newObject, T oldObject) 
    { 
     if (newObject.GetType().GetProperties().Length != oldObject.GetType().GetProperties().Length) 
     { 
      return false; 
     } 
     else 
     { 
      var oldProperties = oldObject.GetType().GetProperties(); 

      foreach (PropertyInfo newProperty in newObject.GetType().GetProperties()) 
      { 
       try 
       { 
        PropertyInfo oldProperty = oldProperties.Single<PropertyInfo>(pi => pi.Name == newProperty.Name); 

        if (newProperty.GetValue(newObject, null) != oldProperty.GetValue(oldObject, null)) 
        { 
         return false; 
        } 
       } 
       catch 
       { 
        return false; 
       } 
      } 

      return true; 
     } 
    } 
} 

tôi đã không kiểm tra được chưa, nó là nhiều hơn một loại thực phẩm cho các tư tưởng để tạo thêm một số ý tưởng từ nhóm.

Một điều có thể là vấn đề khi so sánh các thuộc tính có giá trị thực thể, nếu so sánh mặc định so sánh trên tham chiếu đối tượng thì nó sẽ không bao giờ đúng. Một sửa chữa có thể là để quá tải toán tử bình đẳng trên các thực thể của tôi để nó so sánh trên ID thực thể.

Trả lời

5

Ghi đè phương thức Bằng đối tượng của bạn và viết triển khai so sánh các thuộc tính làm cho nó bằng nhau.

public override bool Equals(object obj) 
    { 
     return MyProperty == ((MyObject)obj).MyProperty 
    } 
+0

Vì vậy, về cơ bản chỉ sử dụng một chuỗi các câu lệnh if để kiểm tra sự bình đẳng trên mỗi thuộc tính và sử dụng sự tiện lợi của phương pháp ghi đè. – James

+0

Vâng, tôi nghĩ vậy. Nếu tôi đã đi quá đơn giản cho những gì bạn đang sau, tại sao không đăng một số mã hơn :) –

+0

Ok, cảm ơn, khi tôi có một cái gì đó thực hiện bệnh bài giải pháp của tôi – James

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