Recipe 9.14 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 object[] TakeSnapshotOfList(ICollection theList)
{
object[] snapshot = new object[theList.Count];
theList.CopyTo(snapshot, 0);
return (snapshot);
}
Discussion
The following method creates a Queue object,
enqueues some data, and then takes a snapshot of it:
public static void TestListSnapshot( )
{
Queue someQueue = new Queue( );
someQueue.Enqueue(1);
someQueue.Enqueue(2);
someQueue.Enqueue(3);
object[] queueSnapshot = TakeSnapshotOfList(someQueue);
}
The TakeSnapshotOfList 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
applications run to show the state of the list or lists over time.
The TakeSnapshotOfList method could easily be used
as a logging/debugging tool for developers. Take, for example, an
ArrayList that is being corrupted at some point in
the application. You can take snapshots of the
ArrayList at various points in the application
using the TakeSnapshotOfList method and then
compare the snapshots to narrow down the list of possible places
where the ArrayList is being corrupted.
See Also
See the "ICollection Interface" and
"Array Class" topics in the MSDN
documentation.
|