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

1 .net c# .net-core asp.net-core jsonconvert

我有两个相同类型的复杂对象。我想检查这两个对象之间是否有任何区别。我有两种选择来实现此目的,要么使用 JsonConvert.SerializeObject 将这两个对象转换为字符串,然后比较字符串,例如

var existingData = JsonConvert.SerializeObject(objOld);
var newData = JsonConvert.SerializeObject(objNew);
return existingData == newData;
Run Code Online (Sandbox Code Playgroud)

另一种选择是使用反射并循环遍历所有属性,如下所示。

    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;
    }
Run Code Online (Sandbox Code Playgroud)

从性能角度来看,上述哪种方法更有效?

Cai*_*ard 8

啊。面对“将其序列化为字符串并使用字符串比较”和“使用反射”我想我会勾选“以上都不是”框

您是否考虑过使用 arecord代替 a class?编译器为您编写所有必要的代码,以根据记录的属性值确定记录的相等性,因此您剩下要做的就是测试记录实例的相等性