You could create a copy constructor in your object that accepts an object of the same type:
public MyObject(MyObject obj)
{
this.Property1 = obj.Property1;
this.Property2 = obj.Property2;
...
}
And then do this when you want to copy it:
List<MyObject> list2 = list1.ConvertAll(x => new MyObject(x));
OR inherit ICloneable, and
public class MyObject : ICloneable<MyObject>
{
public MyObject Clone()
{
return new MyObject{ };
}
}
And do this:
List<MyObject> list2 = list1.ConvertAll(x => x.Clone());
OR
You could serialize the existing objects into a stream and deserialize them back into a new list of objects.