【发布时间】:2013-06-17 20:06:34
【问题描述】:
我想获取为匹配对象而更改的所有属性的名称。我有这些(简化的)类:
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; }
}
现在我想获取属性值不同的对象:
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??
}
最后我想要一个Differences 的列表,如下所示:
class Difference {
public List<string> ChangedProperties { get; set; }
public Person NewPerson { get; set; }
public Person OldPerson { get; set; }
}
ChangedProperties 应包含已更改属性的名称。
【问题讨论】:
-
对列表执行此操作是一个真正的痛苦(假设您需要处理添加/删除/重新排序/等);但是,在每个对象的基础上,请参阅:stackoverflow.com/questions/3060382/… - 正是这样做的
-
@MarcGravell:我试过了,它返回作为增量列表的属性。还是谢谢。
-
你关心不在两个对象中的属性,即将人与学生进行比较时,应将 matriculationNumber 视为变化吗?
-
我将这些人与
Name属性匹配,然后在找到匹配项时进行比较。所以只能比较相同类型的对象。 -
由于 Subjects 是一个列表,如果 1 位教授在列表中有 2 个主题元素,而其他教授只有 1 或 3 个,那么额外或更少的主题元素会算作差异吗?
标签: c# properties comparison