using System.Collections.Generic;
using System.Collections.ObjectModel;
using AnyDiff.Extensions;
public static void Main()
private static void DiffWithAnyDiff()
var list1 = new List<Device> { new Device()
DateCreated = "2020-01-01",
DateCreated = "2020-01-01",
DateCreated = "2020-01-01",
var list2 = new List<Device>
DateCreated = "2020-01-01",
DateCreated = "2020-01-01",
DateCreated = "2020-01-01",
var diff = list1.Diff(list2, ComparisonOptions.All | ComparisonOptions.AllowCollectionsToBeOutOfOrder | ComparisonOptions.AllowEqualsOverride);
var sortedDiff = new List<Difference>();
sortedDiff.AddRange(diff.Where(p => p.LeftValue == null));
sortedDiff.AddRange(diff.Where(p => p.RightValue == null));
sortedDiff.AddRange(diff.Where(p => p.LeftValue != null && p.RightValue != null));
var delta = new Dictionary<int, Device>();
foreach (var difference in sortedDiff)
if (difference.Path == "._items" && difference.ArrayIndex != null)
if (difference.LeftValue == null && difference.ArrayIndex < list2.Count)
var device = list2[difference.ArrayIndex.Value];
delta.Add(device.Id, list2[difference.ArrayIndex.Value]);
Console.WriteLine("Item added:"+ device.Id);
if (difference.RightValue == null && difference.ArrayIndex < list1.Count)
var device = list1[difference.ArrayIndex.Value];
if (!delta.ContainsKey(device.Id))
delta.Add(device.Id, list1[difference.ArrayIndex.Value]);
Console.WriteLine("Item removed:"+ device.Id);
Console.WriteLine("--------------------------------------- ");
Console.WriteLine("Changed items: ");
Console.WriteLine(d.Value.Id+":"+d.Value.Name);
public string DateCreated { get; set; }
public string Name { get; set; }
public int Id { get; set; }