[英]What is the best way to compare two objects in c#
我有两个相同类型的复杂对象。 我想检查这两个对象之间是否有任何区别。 我有两种选择来实现这一点,或者通过使用 JsonConvert.SerializeObject 将这两个对象都转换为字符串并比较字符串,例如
var existingData = JsonConvert.SerializeObject(objOld);
var newData = JsonConvert.SerializeObject(objNew);
return existingData == newData;
另一种选择是使用反射并循环遍历所有属性,如下所示。
protected bool MatchObject(object newObj, object oldObj)
{
Type currentType = newObj.GetType();
PropertyInfo[] props = currentType.GetProperties();
bool isSameObject = true;
foreach (var prop in props)
{
var i = prop.GetValue(newObj);
var f = prop.GetValue(oldObj);
if (!object.Equals(i, f))
{
isSameObject = false;
break;
}
}
return isSameObject;
}
从性能角度来看,上述哪种方法更有效?
啊。 面对“将其序列化为字符串并使用字符串比较”和“使用反射”之间,我想我会勾选“以上都不是”框
您是否考虑过使用record
而不是class
? 编译器为您编写所有必要的代码,以根据记录的属性值确定记录的相等性,因此您要做的就是测试记录实例的相等性
另一种即用型选项是断言框架。 例如 'FluentAssertions' 可以比较 object 图
newObject.Should().BeEquivalentTo(oldObject);
如果 object 及其属性不相等,上述行将引发异常。
Object 图比较
请注意,这只是另一个可通过 NuGet 获得的库,因此您也可以在“生产”代码中使用;)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.