예제 #1
0
        public void Copy(object source, object destination, params string[] excludedMembers)
        {
            Guard.IsNotNull(source, "source");
            Guard.IsNotNull(destination, "destination");

            bool hasExcludedMembers = ((excludedMembers != null) && (excludedMembers.Length > 0));
            Type sourceType         = source.GetType();

            IEnumerable <FieldInfo> fields = fieldCache.GetFields(sourceType);

            if (hasExcludedMembers)
            {
                fields = fields.Where(field => !excludedMembers.Any(name => field.Name.IsCaseInsensitiveEqual(name)));
            }

            foreach (FieldInfo field in fields)
            {
                field.SetValue(destination, field.GetValue(source));
            }

            IEnumerable <PropertyInfo> properties = propertyCache.GetProperties(sourceType);

            if (hasExcludedMembers)
            {
                properties = properties.Where(property => !excludedMembers.Any(name => property.Name.IsCaseInsensitiveEqual(name)));
            }

            foreach (PropertyInfo property in properties)
            {
                if (property.GetIndexParameters().Length == 0)
                {
                    property.SetValue(destination, property.GetValue(source, null), null);
                }
            }
        }