回答
这取决于你想要什么。
- 要创建集合的快照,您可以拨打
IEnumerable<T>.ToList
。 - 如果您还想创建列表和列表中每个对象的快照,那么您还需要为每个对象创建一个单独的副本。如何最好地制作副本取决于您收藏的具体类型。有些类型具有克隆方法。与其他人你可以调用一个构造函数。有些类型不容易复制。
实施例:
List<Foo> snapshot = foos.Select(x => new Foo(x)).ToList();
要检查两个IEnumerable<T>
s为等于(即检查是否有任何改变),可以使用SequenceEqual
。如果您的课程没有按照您需要的方式实施Equals,则还需要指定IEqualityComparer
。
如果你想有一种有效的方法从其ID域的快照中找到特定项目,那么可以使用Dictionary<K, V>
而不是列表。致电IEnumerable<T>.ToDictionary
从您的收藏中创建一本词典。
您是否在检查收藏或每个会员?
一种方法是使用ObservableCollection<T>
。您可以订阅每次修改集合时引发的事件。事件参数指示项目和更改类型。
集合,作为默认解决方案。 – Berryl 2010-08-25 19:59:32
如果你只是想保存快照和检查的列表的大小而变化(项目添加/移除)
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);
标识的列表可以用于查看内容改变了解决东西的标识符。如果你的对象在内存使用上也很大,这种模式会有所帮助。
但是,您可以使用一个ObservableCollection<T>
,它有事件通知您有关更改。通过这种方式,您可以跟踪集合的所有更改(添加/删除/替换)。
- 1. 比较的集合
- 2. 快速比较字典的方法比使用集合
- 3. 比较2套Java集合
- 4. 比较两个集合
- 5. 比较泛型集合?
- 6. 集合和比较器
- 7. 如何加快VBA中2个集合的比较?
- 8. 快速比较字符串与Java中的集合
- 9. 实施IsDirty在WPF MVVM观察集合
- 10. 照片比较c#
- 11. 比较快的方式来比较值
- 12. F#集合的覆盖比较
- 13. iOS的分配工具:比较两个快照的内存
- 14. C++ STL集合和C#集合的比较?
- 15. 如何比较声纳中两个快照的组件?
- 16. 项目和快照之间的架构比较
- 17. 文件和文件夹的快照比较
- 18. 比较两个大集合属性
- 19. 如何比较2个mongodb集合?
- 20. 比较两个对象集合
- 21. 如何比较两个通用集合?
- 22. 比较两个集合数据彼此
- 23. 比较集合不同项目类型
- 24. 骨干集合:自定义比较器
- 25. 休眠HQL比较两个集合
- 26. Hibernate HQL和Grails-如何比较集合?
- 27. 最快的类型比较?
- 28. 最快的数组比较
- 29. MongoDB-通过比较集合与对象数组的比较集合返回Array的现有字段
- 30. 进程快照不能对宽字符串进行比较
+1 for SequenceEqual – 2010-08-25 19:59:46