什么是存储集合快照以供后续 IsDirty 检查的好方法(快速、高效等)?
干杯,
贝瑞尔
请您参考如下方法:
如果您只想保存快照并检查列表的大小是否发生变化(添加/删除项目)
var snapshot = new List<Foo>(list);
但是,如果您要更改列出的项目并想检查项目是否已更改,则必须克隆每个项目。如果您只是将它们填充到另一个列表中,引用应该保持不变。
var snapshot = list.Select(item => new Foo
{
Property1 = item.Property1,
... ,
PropertyN = item.PropertyN
});
如果您只想查看列表的计数是否发生变化,您可以使用第一个版本。
也许你的对象上有一个标识符,它简化了类似这样的解决方案
var snapshot = list.Select(item => item.Id);
ID列表可以用来查看内容是否发生了变化。如果您的对象的内存使用量也很大,则此模式会有所帮助。
但是您可以使用 ObservableCollection<T>其中有通知您更改的事件。这样您就可以跟踪对集合的所有更改(添加/删除/替换)。
