Практически невозможно скопировать объект, поскольку он, скорее всего, относится к ссылочным типам.Идеальным методом является сериализация или потоковая передача объекта в новый - при условии, что ваш класс сериализуем (предоставив атрибут [Serializable] в объявлении класса).
private static T Clone<T>(T source)
{
if (!typeof(T).IsSerializable)
{
throw new ArgumentException("The type must be serializable.", "source");
}
if (Object.ReferenceEquals(source, null))
{
return default(T);
}
System.Runtime.Serialization.IFormatter formatter = new System.Runtime.Serialization.Formatters.Binary.BinaryFormatter();
Stream stream = new MemoryStream();
using (stream)
{
formatter.Serialize(stream, source);
stream.Seek(0, SeekOrigin.Begin);
return (T)formatter.Deserialize(stream);
}
}
Теперь вы можете использовать этот код:
[Serializable]
public class MyClass
{
public int a {get; set;}
public int b {get; set;}
}
var obj = new MyClass{
a = 10,
b = 20,
};
var newobj = Clone<MyClass>(obj);
Вы получите совершенно новую копию obj.Примечание. Любой другой класс внутри MyClass также должен быть объявлен с атрибутом [Serializable].