Tôi muốn lấy tên của tất cả các thuộc tính đã thay đổi cho các đối tượng trùng khớp. Tôi có những (đơn giản hóa) lớp:So sánh các thuộc tính tự động
public enum PersonType { Student, Professor, Employee }
class Person {
public string Name { get; set; }
public PersonType Type { get; set; }
}
class Student : Person {
public string MatriculationNumber { get; set; }
}
class Subject {
public string Name { get; set; }
public int WeeklyHours { get; set; }
}
class Professor : Person {
public List<Subject> Subjects { get; set; }
}
Bây giờ tôi muốn để có được các đối tượng nơi các giá trị tài sản khác nhau:
List<Person> oldPersonList = ...
List<Person> newPersonList = ...
List<Difference> = GetDifferences(oldPersonList, newPersonList);
public List<Difference> GetDifferences(List<Person> oldP, List<Person> newP) {
//how to check the properties without casting and checking
//for each type and individual property??
//can this be done with Reflection even in Lists??
}
Cuối cùng tôi muốn có một danh sách Difference
giống như này:
class Difference {
public List<string> ChangedProperties { get; set; }
public Person NewPerson { get; set; }
public Person OldPerson { get; set; }
}
ChangedProperties
phải chứa tên của thuộc tính đã thay đổi.
Làm điều này cho danh sách là một nỗi đau * thực * (giả sử bạn cần xử lý thêm/xóa/sắp xếp lại/etc); tuy nhiên, trên cơ sở từng đối tượng, vui lòng xem: http://stackoverflow.com/questions/3060382/comparing-2-objects-and-retrieve-a-list-of-fields-with-different-values - cái nào chính xác số này –
@MarcGravell: Tôi đã thử nó và nó trả về các thuộc tính được liệt kê dưới dạng delta. Dù sao cũng cảm ơn bạn. –
Bạn có quan tâm đến các thuộc tính không có trong cả hai đối tượng, I.e. nên matriculationNumber được coi là một sự thay đổi khi bạn so sánh một người với một sinh viên? –