我想知道比较两个相同类型实体的最有效方法。
手动从xml文件创建一个实体(即新实例和手动设置属性),另一个实体从我的对象上下文中重新创建。
我想知道每个实例中的属性值是否相同。
我的第一个想法是从每个对象生成属性值的哈希值并比较哈希值,但可能有另一种方式,或者内置方式?
欢迎任何建议。
非常感谢,
詹姆斯
更新
我想出了这个:
static class ObjectComparator<T>
{
static bool CompareProperties(T newObject, T oldObject)
{
if (newObject.GetType().GetProperties().Length != oldObject.GetType().GetProperties().Length)
{
return false;
}
else
{
var oldProperties = oldObject.GetType().GetProperties();
foreach (PropertyInfo newProperty in newObject.GetType().GetProperties())
{
try
{
PropertyInfo oldProperty = oldProperties.Single<PropertyInfo>(pi => pi.Name == newProperty.Name);
if (newProperty.GetValue(newObject, null) != oldProperty.GetValue(oldObject, null))
{
return false;
}
}
catch
{
return false;
}
}
return true;
}
}
}
我还没有对它进行过测试,从团队中获得更多想法更能让人深思。
可能存在问题的一件事是比较具有实体值本身的属性,如果默认比较器在对象引用上进行比较,那么它将永远不会为真。可能的解决方法是重载我的实体上的相等运算符,以便它比较实体ID。
答案 0 :(得分:6)
覆盖对象的Equals方法并编写一个实现,用于比较使其相等的属性。
public override bool Equals(object obj)
{
return MyProperty == ((MyObject)obj).MyProperty
}