C# 找出两个对象中的不同之处 返回
C#论坛
老数据
1
1369
fate sta 发布于2023/5/7
悬赏:5 飞吻
我现在有两个对象,每个对象里面包含了对象和集合,但是这两个对象的结构一模一样,只是这两个对象中某些元素的值不一样,请问我怎么找出不一样的?
遍历两个对象中的所有属性和字段。
检查每个属性和字段的值是否相等。
如果值不相等,则记录属性或字段名称及其不同的值。
返回记录的属性和字段名称及其不同的值。
以下是一个示例代码片段,演示如何查找两个对象中的不同之处:
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)
-
fate sta VIP02023/5/7
可以使用第三方库 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 回复