You need to clone them somehow. Either implement [ICloneable][1] interface and do all rewriting manually or you can use some hacks/tricks like serializing and deserializing object.

Flow with serialization is something like this:

1. Take your object
2. Serialize it to, for example, JSON, binnary format etc.
3. Now deserialize what you got in step 2 into new object

You'll have a copy of your object that way but it costs more processing power and is prone to some hard to catch errors. But it's an easy way to go. Thing with implementing ICloneable is more reliable but you need to write all that mapping by yourself.

Also, consider using structs instead of classes. [Structs][2] are always copied by value not reference. It has some drawbacks so it's up to you if they suit your usage scenario. 


 [1]: https://msdn.microsoft.com/en-us/library/system.icloneable(v=vs.110).aspx "ICloneable interface"
 [2]: https://msdn.microsoft.com/en-us/library/saxz13w4.aspx "Structs"