列表之间的双向同步

时间:2018-03-12 13:32:00

标签: c#

我希望这里有人可以帮我解决这个令我头疼的问题。

如果我有两个自定义对象列表,是否有任何方法(使用LINQ或其他方式)以高效性能同步它们?性能很重要,因为可能存在列表中的大量对象。

我需要在一个列表中检查新项目或已删除项目 - 我假设这里有一个列表是主列表,只允许在那里添加对象或者直接删除对象,所以这不会看起来太难了。

但我还需要根据时间戳(最新优先)同步对 列表所做的更改。

代码示例:

public class CalendarItem
{
    public CalendarItem(int id, string subject, string content, DateTime lastUpdated, DateTime startTime, DateTime endTime)
    {
        Id = id;
        Subject = subject;
        Content = content;
        LastUpdated = lastUpdated;
        StartTime = startTime;
        EndTime = endTime;
    }

    public int Id { get; }
    public DateTime LastUpdated { get; }
    public string Subject { get; }
    public string Content { get; }
    public DateTime StartTime { get; }
    public DateTime EndTime { get; }
}

然后我希望能够执行以下设置:

var time = DateTime.Now;

var itemIdentical1 = new CalendarItem(1, "Item Identical On Both Lists", "", time, DateTime.Now, DateTime.Now);
var itemIdentical2 = new CalendarItem(1, "Item Identical On Both Lists", "", time, DateTime.Now, DateTime.Now);

var itemBeforeUpdate1 = new CalendarItem(2, "Item On List 1 Will Be Changed", "", time, DateTime.Now, DateTime.Now);
var itemUpdated1 = new CalendarItem(2, "Item on List 1 Changed", "", time.AddMinutes(15), DateTime.Now, DateTime.Now);

var itemBeforeUpdate2 = new CalendarItem(3, "Item On List 2 Will Be Changed", "", time, DateTime.Now, DateTime.Now);
var itemUpdated2 = new CalendarItem(3, "Item on List 2 Changed", "", time.AddMinutes(15), DateTime.Now, DateTime.Now);

var itemBeforeUpdate3 = new CalendarItem(4, "More Item On List 2 Will Be Changed", "", time, DateTime.Now, DateTime.Now);
var itemUpdated3 = new CalendarItem(4, "More Item on List 2 Changed", "", time.AddMinutes(15), DateTime.Now, DateTime.Now);

var list1 = new List<CalendarItem> { itemIdentical1, itemUpdated1, itemBeforeUpdate2, itemBeforeUpdate3 };
var list2 = new List<CalendarItem> { itemIdentical2, itemBeforeUpdate1, itemUpdated2, itemUpdated3 };

然后在这里我们应该有一个我缺少的神奇步骤,以获得以下内容:

var listOfItemsToUpdateOnList1 = List { itemUpdated2, itemUpdated3 };
var listOfItemsToUpdateOnList2 = List { itemUpdated1 };

0 个答案:

没有答案