回答
這取決於你想要什麼。
- 要創建集合的快照,您可以撥打
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. Hamcrest比較集合
- 3. 快速比較字典的方法比使用集合
- 4. 比較集合中的值
- 5. 比較集合與模擬集合
- 6. 比較兩個集合
- 7. 集合和比較器
- 8. 比較泛型集合?
- 9. C#比較兩個集合
- 10. 比較2套Java集合
- 11. 快速比較字符串與Java中的集合
- 12. 如何加快VBA中2個集合的比較?
- 13. 實施IsDirty在WPF MVVM觀察集合
- 14. SSRS圖表:比較集合與子集
- 15. 照片比較c#
- 16. 比較快的方式來比較值
- 17. LINQ到比較集合的實體
- 18. F#集合的覆蓋比較
- 19. 比較集合元素(Python)的麻煩?
- 20. 比較骨幹中的兩個集合
- 21. iOS的分配工具:比較兩個快照的內存
- 22. SQL Server - 與group by的集合比沒有集合的集合更快
- 23. C++ STL集合和C#集合的比較?
- 24. PL/SQL集合的限制 - 在比較到Java集合
- 25. Python,集合,比較同一集合中的兩個元素
- 26. JProfiler快照速度較慢
- 27. 創建並比較架構定義的快照
- 28. 項目和快照之間的架構比較
- 29. 如何比較聲納中兩個快照的組件?
- 30. 文件和文件夾的快照比較
+1 for SequenceEqual – 2010-08-25 19:59:46