DekGenius.com
[ Team LiB ] Previous Section Next Section

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.

    [ Team LiB ] Previous Section Next Section