Глубокое клонирование объектов - PullRequest
2035 голосов
/ 17 сентября 2008

Я хочу сделать что-то вроде:

MyObject myObj = GetMyObj(); // Create and fill a new object
MyObject newObj = myObj.Clone();

И затем внесите изменения в новый объект, которые не отражены в исходном объекте.

Мне не часто нужны эти функции, поэтому, когда это было необходимо, я прибегал к созданию нового объекта, а затем копировал каждое свойство по отдельности, но это всегда оставляло у меня ощущение, что есть лучший или более элегантный способ справиться с ситуацией.

Как я могу клонировать или выполнить глубокое копирование объекта, чтобы клонированный объект мог быть изменен без каких-либо изменений, отраженных в исходном объекте?

Ответы [ 41 ]

0 голосов
/ 13 апреля 2014

как насчет просто переписать внутри метода это должно вызывать в основном конструктор автоматического копирования

T t = new T();
T t2 = (T)t;  //eh something like that

        List<myclass> cloneum;
        public void SomeFuncB(ref List<myclass> _mylist)
        {
            cloneum = new List<myclass>();
            cloneum = (List < myclass >) _mylist;
            cloneum.Add(new myclass(3));
            _mylist = new List<myclass>();
        }

мне кажется, работает

...