コード例 #1
0
        private static IEnumerable <CloneFieldInfo> GetTypeFields(Type type)
        {
            return(type
                   .Fields()
                   .Where(x => !x.IsStatic && x.DeclaringType == type && x.CanWrite())
                   .Select(x =>
            {
                var attrMember = (MemberInfo)x.DeclaringProperty() ?? x;

                var clone = CloneObjectEx.GetCloneTypeFromAttribute(attrMember) ??
                            CloneObjectEx.GetCloneType(x.FieldType);

                return new CloneFieldInfo(x, clone);
            }));
        }
コード例 #2
0
        private static CloneObject CreateArrayClone(Type type)
        {
            var elementType = type.GetElementType();

            switch (CloneObjectEx.GetCloneType(elementType))
            {
            case CloneType.Ignore:
                return(CloneObjectEx.Ignore);

            case CloneType.Copy:
                return(CloneObjectEx.CopyArray);

            case CloneType.Deep:
                return(CloneObjectEx.CloneArray(elementType));

            default:
                throw new ArgumentOutOfRangeException();
            }
        }
コード例 #3
0
        private static CloneObject CreateObjectClone(Type type)
        {
            switch (CloneObjectEx.GetCloneType(type))
            {
            case CloneType.Ignore:
                return(CloneObjectEx.Ignore);

            case CloneType.Copy:
                return(CloneObjectEx.Copy);

            case CloneType.Deep:
                if (type.IsArray)
                {
                    return(CreateArrayClone(type));
                }

                return(CloneObjectEx.DeepCloneObject(type));

            default:
                throw new ArgumentOutOfRangeException();
            }
        }