/// <summary> /// Create a new collection that is an exact copy of source. /// </summary> /// <param name="source">The source collection.</param> /// <returns>A new collection that is an exact copy of source.</returns> internal override object createCopy(object source, CopyFilter filter) { ICollection <T> sourceCollection = (ICollection <T>)source; ICollection <T> destinationCollection = (ICollection <T>)System.Activator.CreateInstance(sourceCollection.GetType()); MemberCopier copier = MemberCopier.getCopyClass(sourceCollection.GetType().GetGenericArguments()[0]); foreach (T item in sourceCollection) { Object newObj = copier.createCopy(item, filter); destinationCollection.Add((T)newObj); } return(destinationCollection); }
/// <summary> /// Copy the values from source into destination. /// </summary> /// <param name="source">The source collection.</param> /// <param name="destination">The destination collection.</param> /// <param name="info">The member wrapper to set the info.</param> internal override void copyValue(object source, object destination, MemberWrapper info, CopyFilter filter) { ICollection <T> sourceCollection = (ICollection <T>)info.getValue(source, null); ICollection <T> destinationCollection = (ICollection <T>)System.Activator.CreateInstance(sourceCollection.GetType()); MemberCopier copier = MemberCopier.getCopyClass(sourceCollection.GetType().GetGenericArguments()[0]); foreach (T item in sourceCollection) { Object newObj = copier.createCopy(item, filter); destinationCollection.Add((T)newObj); } info.setValue(destination, destinationCollection, null); }
/// <summary> /// Create a new dictionary that is an exact copy of source. /// </summary> /// <param name="source">The dictionary to clone.</param> /// <returns>A new dictionary that is an exact copy of source.</returns> internal override object createCopy(object source, CopyFilter filter) { IDictionary <Key, Value> sourceDictionary = (IDictionary <Key, Value>)source; Type dictionaryType = sourceDictionary.GetType(); IDictionary <Key, Value> destDictionary = (IDictionary <Key, Value>)System.Activator.CreateInstance(dictionaryType); Type[] keyValueTypes = dictionaryType.GetGenericArguments(); MemberCopier keyCopier = MemberCopier.getCopyClass(keyValueTypes[0]); MemberCopier valueCopier = MemberCopier.getCopyClass(keyValueTypes[1]); foreach (Key key in sourceDictionary.Keys) { Key copiedKey = (Key)keyCopier.createCopy(key, filter); Value copiedValue = (Value)valueCopier.createCopy(sourceDictionary[key], filter); destDictionary.Add(copiedKey, copiedValue); } return(destDictionary); }
/// <summary> /// Copy source into destination. /// </summary> /// <param name="source">The source dictionary.</param> /// <param name="destination">The destination dictionary.</param> /// <param name="info">The member wrapper to set data.</param> internal override void copyValue(object source, object destination, MemberWrapper info, CopyFilter filter) { IDictionary <Key, Value> sourceDictionary = (IDictionary <Key, Value>)info.getValue(source, null); if (sourceDictionary != null) { Type dictionaryType = sourceDictionary.GetType(); IDictionary <Key, Value> destDictionary = (IDictionary <Key, Value>)System.Activator.CreateInstance(dictionaryType); Type[] keyValueTypes = dictionaryType.GetGenericArguments(); MemberCopier keyCopier = MemberCopier.getCopyClass(keyValueTypes[0]); MemberCopier valueCopier = MemberCopier.getCopyClass(keyValueTypes[1]); foreach (Key key in sourceDictionary.Keys) { Key copiedKey = (Key)keyCopier.createCopy(key, filter); Value copiedValue = (Value)valueCopier.createCopy(sourceDictionary[key], filter); destDictionary.Add(copiedKey, copiedValue); } info.setValue(destination, destDictionary, null); } }