Chcę uzyskać nazwy wszystkich właściwości, które zostały zmienione dla pasujących obiektów. mam te (uproszczony) klasy:Porównywanie właściwości automatycznie
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; }
}
teraz chcę dostać obiekty gdzie wartości właściwości różnią:
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??
}
W końcu chciałbym mieć listę Difference
Like to:
class Difference {
public List<string> ChangedProperties { get; set; }
public Person NewPerson { get; set; }
public Person OldPerson { get; set; }
}
Nazwa ChangedProperties
powinna zawierać nazwę zmienionych właściwości.
Robiąc to dla list jest * prawdziwy * ból (przy założeniu, że musisz obsługiwać dodawanie/usuwanie/ponowne zamówienie/etc); jednak w odniesieniu do poszczególnych obiektów, zobacz: http://stackoverflow.com/questions/3060382/porównanie-2-objects-and-retrieve-a-list-of-fields-with-different-values - which does dokładnie to –
@MarcGravell: Próbowałem go i zwraca atrybuty, które są listami jako delta. Dzięki i tak. –
Dbasz o właściwości, które nie znajdują się w obu obiektach, tj. powinno być uznawane za stopęLiczba uznawana za zmianę, gdy porównujesz osobę z uczniem? –