比较两个list<T> 对象的差异,如果list中包含List 则进行递归比较,列出新增,修改,删除的部分
时间: 2023-11-27 15:04:29 浏览: 33
可以通过自定义一个递归比较函数来实现这个功能。下面是一个示例代码:
```csharp
public class ListComparer<T>
{
public List<T> Added { get; private set; } = new List<T>();
public List<T> Modified { get; private set; } = new List<T>();
public List<T> Deleted { get; private set; } = new List<T>();
public void Compare(List<T> original, List<T> updated)
{
// Compare added items
foreach (T item in updated.Except(original))
{
Added.Add(item);
}
// Compare deleted items
foreach (T item in original.Except(updated))
{
Deleted.Add(item);
}
// Compare modified items
foreach (T item in updated.Intersect(original))
{
if (item is IList subList)
{
// Recursively compare sub-lists
Compare(subList.Cast<T>().ToList(), ((IList)original.First(x => x.Equals(item))).Cast<T>().ToList());
}
else if (!item.Equals(original.First(x => x.Equals(item))))
{
Modified.Add(item);
}
}
}
}
```
使用示例:
```csharp
List<string> original = new List<string> { "a", "b", "c", "d" };
List<string> updated = new List<string> { "a", "c", "e", "f" };
ListComparer<string> comparer = new ListComparer<string>();
comparer.Compare(original, updated);
Console.WriteLine("Added: " + string.Join(", ", comparer.Added));
Console.WriteLine("Modified: " + string.Join(", ", comparer.Modified));
Console.WriteLine("Deleted: " + string.Join(", ", comparer.Deleted));
```
输出结果:
```
Added: e, f
Modified: c
Deleted: b, d
```