我正在寻找一种方法来获得对象的两个实例之间的差异.我编写的以下函数使用反射来实现手头的目的,但我想更多地增强它,以便它可以跳过具有特定数据注释的某些字段.例如,在实体框架模型中使用的'[NotMapped]和[JsonIgnore]'注释
public static List<ChangeSet> GetVariances<T>(this T previous, T updated)
{
List<ChangeSet> changeSet = new List<ChangeSet>();
try
{
string[] excludedFields = { "Id", "DateCreated", "DateModified" };
Type entityType = previous.GetType();
FieldInfo[] fieldInfo = entityType.GetFields(BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Public);
foreach (FieldInfo x in fieldInfo)
{
if (!excludedFields.Any(z => x.Name.Contains(z))){
ChangeSet change = new ChangeSet
{
Field = x.Name,
PreviousValue = x.GetValue(previous),
UpdatedValue = x.GetValue(updated)
};
if (!Equals(change.PreviousValue, change.UpdatedValue))
changeSet.Add(change);
}
}
}
catch (Exception ex)
{
var exception = ex.Message;
}
return …Run Code Online (Sandbox Code Playgroud)