C# 找出两个对象中的不同之处 返回

C#论坛 老数据
1 1369

我现在有两个对象,每个对象里面包含了对象和集合,但是这两个对象的结构一模一样,只是这两个对象中某些元素的值不一样,请问我怎么找出不一样的?


遍历两个对象中的所有属性和字段。

检查每个属性和字段的值是否相等。

如果值不相等,则记录属性或字段名称及其不同的值。

返回记录的属性和字段名称及其不同的值。

以下是一个示例代码片段,演示如何查找两个对象中的不同之处:


 
using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
// 假设有两个对象 ObjectA 和 ObjectB
ObjectA objectA = new ObjectA();
ObjectB objectB = new ObjectB();
// 比较 ObjectA 和 ObjectB 的不同之处
var differences = new List<string>();
foreach (PropertyInfo propertyInfo in objectA.GetType().GetProperties())
{
    // 检查属性值是否相等
    object valueA = propertyInfo.GetValue(objectA);
    object valueB = propertyInfo.GetValue(objectB);
    if (!object.Equals(valueA, valueB))
    {
        // 记录属性名称及其不同的值
        differences.Add($"{propertyInfo.Name}: {valueA} (ObjectA) != {valueB} (ObjectB)");
    }
}
foreach (FieldInfo fieldInfo in objectA.GetType().GetFields())
{
    // 检查字段值是否相等
    object valueA = fieldInfo.GetValue(objectA);
    object valueB = fieldInfo.GetValue(objectB);
    if (!object.Equals(valueA, valueB))
    {
        // 记录字段名称及其不同的值
        differences.Add($"{fieldInfo.Name}: {valueA} (ObjectA) != {valueB} (ObjectB)");
    }
}
// 输出不同之处
if (differences.Any())
{
    Console.WriteLine($"The following differences were found between ObjectA and ObjectB:");
    foreach (string difference in differences)
    {
        Console.WriteLine(difference);
    }
}
else
{
    Console.WriteLine("ObjectA and ObjectB are identical.");
}

请注意,以上代码仅为示例,您需要根据自己的情况修改代码。此外,如果您的对象中包含了嵌套的对象或集合,您需要在比较它们的属性和字段时进行递归。


热忱回答1

  •  可以使用第三方库 ObjDiff 。ObjDiff 是一个轻量级的 NuGet 包,可以比较两个对象之间的差异,支持递归比较嵌套对象、集合、字典等类型。下面是一个使用 ObjectDiff 比较两个对象的例子:

     
    using ObjectDiff;
    using System;
    class Program
    {
        static void Main(string[] args)
        {
            var obj1 = new { Name = "Tom", Age = 20 };
            var obj2 = new { Name = "Jerry", Age = 21 };
            var diff = obj1.Diff(obj2);
            foreach (var change in diff.Changes)
            {
                Console.WriteLine($"{change.ChangeType} - {change.PropertyName}: {change.OldValue} => {change.NewValue}");
            }
        }
    }


    0 回复