Recipe5.13.Storing Snapshots of Lists in an Array


Recipe 5.13. Storing Snapshots of Lists in an Array

Problem

You have an ArrayList, Queue, or Stack object and you want to take a snapshot of its current state. (Note that this recipe also works for any other data type that implements the ICollection interface.)

Solution

Use the CopyTo method declared in the ICollection interface. The following method, TakeSnapshotOfList, accepts any type that implements the ICollection interface and takes a snapshot of the entire object's contents. This snapshot is returned as an object array:

 public static T[] TakeSnapshotOfList<T>(ICollection theList) {     T[] snapshot = new T[theList.Count];     theList.CopyTo(snapshot, 0);     return (snapshot); } 

Discussion

The following method creates a Queue<int> object, enqueues some data, and then takes a snapshot of it:

 public static void TestListSnapshot( ) {     Queue<int> someQueue = new Queue<int>( );     someQueue.Enqueue(1);     someQueue.Enqueue(2);     someQueue.Enqueue(3);     int[] queueSnapshot = TakeSnapshotOfList<int>(someQueue); } 

The TakeSnapshotOfList<T> is useful when you want to record the state of an object that implements the ICollection interface. This "snapshot" can be compared to the original list later on to determine what, if anything, has changed in the list. Multiple snapshots can be taken at various points in an application's run to show the state of the list or lists over time.

The TakeSnapshotOfList<T> method could easily be used as a logging/debugging tool for developers. Take, for example, a List<T> that is being corrupted at some point in the application. You can take snapshots of the List<T> at various points in the application using the TakeSnapshotOfList<T> method and then compare the snapshots to narrow down the list of possible places where the List<T> is being corrupted.

See Also

See the "ICollection Interface" and "Array Class" topics in the MSDN documentation.



C# Cookbook
Secure Programming Cookbook for C and C++: Recipes for Cryptography, Authentication, Input Validation & More
ISBN: 0596003943
EAN: 2147483647
Year: 2004
Pages: 424

flylib.com © 2008-2017.
If you may any questions please contact us: flylib@qtcs.net