I have a WPF form that takes a list of objects that have locations and sizes and plots them on the canvas. I’m currently trying to implement an undo button that will throw out all the changes that have been made to the positions of the objects and revert back to the original collection that was retrieved when the form loaded.
As it stands now I go out to the database on the load of the form and get all the objects that will need to be displayed then assign the list that is returned to two seperate collections. The problem that comes up is that the two collections are actually pointers to the original collection and whenever one is changed the changes are reflected in the second collection.
Is it possible to copy a list of objects so that changes made to one collection won’t affect the secondary collection?
So far I’ve tried simply using the assignment operator, passing the source collection into a function byval and scrolling through each element of the list manually adding it to the second collection and using linq to get all the objects from the original list and pushing the results to a separate temporary list and assigning the second collection to the temporary list.
I feel like I’m overcomplicating the issue but almost all the places I’ve come across while googling say that this behavior is by design, which I understand but it seems like this would be a fairly common idea.
Here’s a function I have used before to make “Deep” copies of objects:
This is kind of a low level approach compared to some of the other answers, but allows you to deep copy any object. I’ve used it successfully in a situation similar to yours where I needed a deep copy of an array.