using System; using System.IO; using System.Runtime.Serialization; using System.Runtime.Serialization.Formatters.Binary; public static class ObjectCopier { public static T Clone(T source) { if (!typeof(T).IsSerializable) { throw new ArgumentException("The type must be serializable.", "source"); } if (object.ReferenceEquals(source, null)) { return default(T); } IFormatter formatter = new BinaryFormatter(); Stream stream = new MemoryStream(); T result; using (stream) { formatter.Serialize(stream, source); stream.Seek(0L, SeekOrigin.Begin); result = (T)((object)formatter.Deserialize(stream)); } return result; } }