At work we were encountering a problem where the original object was changed after we send a copy through a method. We did find a workaround by using IClonable
IClonable
The docs at MSDN say it pretty clearly. Value types are passed as a copy by default, objects are passed as a reference by default. Methods in C#