我正在尝试比较 C# 中的两个复杂对象,并生成一个包含两者之间差异的字典。
如果我有这样的课程:
public class Product
{
public int Id {get; set;}
public bool IsWhatever {get; set;}
public string Something {get; set;}
public int SomeOtherId {get; set;}
}
一个例子,因此:
var p = new Product
{
Id = 1,
IsWhatever = false,
Something = "Pony",
SomeOtherId = 5
};
另一个:
var newP = new Product
{
Id = 1,
IsWhatever = true
};
为了获得这些之间的差异,我正在做的事情包括:
var oldProps = p.GetType().GetProperties();
var newProps = newP.GetType().GetProperties();
// snip
foreach(var newInfo in newProps)
{
var oldVal = oldInfo.GetValue(oldVersion, null);
var newVal = newInfo.GetValue(newVersion,null);
}
// snip - some ifs & thens & other stuff
有趣的是这条线
var newVal = newInfo.GetValue(newVersion,null);
使用上面的示例对象,这一行会给我一个默认值 0 SomeOtherId
(对于 bools & DateTimes & whathaveyou 的情况相同)。
我正在寻找的是一种newProps
仅包含对象中明确指定的属性的方法,因此在上面的示例中,Id
并且IsWhatever
. 我玩了BindingFlags
几次都没有用。
这可能吗?有没有更清洁/更好的方法,或者有什么工具可以帮我省去麻烦?
谢谢。