Глубокий Clone()
От: Chardex Россия  
Дата: 01.03.05 13:40
Оценка:
Можно ли склонировать сложный объект ( в котором есть коллекции, в объектах которых тоже коллекции и т.п. )
Не нагроможндая кучу циклов
Я для всех классов имплементил IClonable, для коллекций делал:

class SomeCollection: CollectionBase
{
    #region ICloneable Members
    public object Clone()
    {
        return InnerList.Clone();
    }
    #endregion
}

Но когда я хочу сделать копию этой коллекции SomeCollection sm = ( SomeCollection ) coll.Clone(); то получаю эксепшен приведения типов. Вроде понятно почему. Просто не охото писать эти циклы копирования для всех коллекций.
Re: Глубокий Clone()
От: _FRED_ Черногория
Дата: 01.03.05 14:53
Оценка: 2 (1)
Здравствуйте, Chardex, Вы писали:

C>Можно ли склонировать сложный объект ( в котором есть коллекции, в объектах которых тоже коллекции и т.п. )

C>Не нагроможндая кучу циклов
C>Я для всех классов имплементил IClonable, для коллекций делал:

C>
C>class SomeCollection: CollectionBase
C>{
C>    #region ICloneable Members
C>    public object Clone()
C>    { 
          SomeCollection clone = new SomeCollection();
          clone.InnerList.AddRange(InnerList);
          return clone
C>    }
C>    #endregion
C>}
C>

C>Но когда я хочу сделать копию этой коллекции SomeCollection sm = ( SomeCollection ) coll.Clone(); то получаю эксепшен приведения типов. Вроде понятно почему. Просто не охото писать эти циклы копирования для всех коллекций.
Help will always be given at Hogwarts to those who ask for it.
Re[2]: Глубокий Clone()
От: VladD2 Российская Империя www.nemerle.org
Дата: 04.03.05 00:08
Оценка: +2
Здравствуйте, _FRED_, Вы писали:

C>>
C>>class SomeCollection: CollectionBase
C>>{
C>>    #region ICloneable Members
C>>    public object Clone()
C>>    { 
_FR>          SomeCollection clone = new SomeCollection();
_FR>          clone.InnerList.AddRange(InnerList);
_FR>          return clone
C>>    }
C>>    #endregion
C>>}
C>>


Какое же это глубокое клонирование? Все элементы у обоих коллекций будут идентичными. Тут нужно выикл делать и для каждого элемента тоже Clone() вызывать.
... << RSDN@Home 1.1.4 beta 3 rev. 279>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re: Глубокий Clone()
От: Аноним  
Дата: 04.03.05 07:56
Оценка:
Здравствуйте, Chardex, Вы писали:

C>Можно ли склонировать сложный объект ( в котором есть коллекции, в объектах которых тоже коллекции и т.п. )

C>Не нагроможндая кучу циклов
C>Я для всех классов имплементил IClonable, для коллекций делал:

C>
C>class SomeCollection: CollectionBase
C>{
C>    #region ICloneable Members
C>    public object Clone()
C>    {
C>        return InnerList.Clone();
C>    }
C>    #endregion
C>}
C>

C>Но когда я хочу сделать копию этой коллекции SomeCollection sm = ( SomeCollection ) coll.Clone(); то получаю эксепшен приведения типов. Вроде понятно почему. Просто не охото писать эти циклы копирования для всех коллекций.

Если все элементы Serializable, то серилизовать и десирилизовать из потока, будет deep copy.
Re[2]: Глубокий Clone()
От: GarryIV  
Дата: 04.03.05 17:21
Оценка:
Hello, !

> Если все элементы Serializable, то серилизовать и десирилизовать из

> потока, будет deep copy.

И deep тормоза заодно...
Posted via RSDN NNTP Server 1.9
WBR, Igor Evgrafov
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.