我有几个复杂的对象,我想比较它们的属性。下面的代码做得很好,直到你得到一个集合。我想用集合的每个成员递归调用该函数。有人可以看一下并帮助我确定集合中对象的类型,以便我可以再次调用 HasPropertyChanged 吗?
这个伪代码显示了我的意图
if (p.GetType() == typeof(System.Collections.Generic.List<>))
{
foreach (var blah in //the list)
{
HasPropertyChanged<//TheType>(Type obj1, Type obj2, null);
}
}
此外,这部分代码也让我感到困惑。如果我不调用 tostring 方法,我会得到一些奇怪的结果,比如 id 63633 not equaling 63633
object val1 = Original.GetType().GetProperty(p.Name).GetValue(Original, null);
object val2 = Modified.GetType().GetProperty(p.Name).GetValue(Modified, null);
if (!IgnoreProperties.Contains(p.Name) &&
val1 != null && val2 != null &&
val1.ToString() != val2.ToString())
{
return true;
}
这里是它的全部。
private bool HasPropertyChanged<T>(T Original, T Modified, string[] IgnoreProperties)
{
if (Original == null || Modified == null)
return false;
if (IgnoreProperties == null)
IgnoreProperties = new string[] { };
IEnumerable<PropertyInfo> properties = typeof(T).GetProperties();
foreach (var p in properties)
{
if (p.GetType() == typeof(System.Collections.Generic.List<>))
{
foreach (var blah in //the list)
{
HasPropertyChanged<//TheType>(Type obj1, Type obj2, null);
}
}
object val1 = Original.GetType().GetProperty(p.Name).GetValue(Original, null);
object val2 = Modified.GetType().GetProperty(p.Name).GetValue(Modified, null);
if (!IgnoreProperties.Contains(p.Name) &&
val1 != null && val2 != null &&
val1.ToString() != val2.ToString())
{
return true;
}
}
return false;
}