Пример #1
0
        /// <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);
        }
Пример #2
0
        /// <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);
        }
Пример #3
0
        /// <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);
        }
Пример #4
0
        /// <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);
            }
        }