繁体   English   中英

比较 c# 中两个对象的最佳方法是什么

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM