Пример #1
0
        private IList <ReflectedField> GetAffectedFields(Type typeToReflect)
        {
            IList <ReflectedField> affectedFields;

            if (!_reflectedTypes.TryGetValue(typeToReflect, out affectedFields))
            {
                affectedFields = new List <ReflectedField>();
                FieldInfo[] fieldInfos = typeToReflect.Fields().Where(fi => !IsPrimitive(fi.FieldType)).ToArray();

                for (int i = 0; i < fieldInfos.Length; i++)
                {
                    FieldInfo fieldInfo = fieldInfos[i];

                    DeepCloneBehavior dcb = GetDeepCloneBehaviour(fieldInfo);

                    if (dcb != DeepCloneBehavior.Shallow)
                    {
                        affectedFields.Add(new ReflectedField
                        {
                            FieldInfo    = fieldInfo,
                            MemberGetter = fieldInfo.DelegateForGetFieldValue(),
                            MemberSetter = fieldInfo.DelegateForSetFieldValue(),
                            Behaviour    = dcb
                        });
                    }
                }

                _reflectedTypes.Add(typeToReflect, affectedFields);
            }

            return(affectedFields);
        }
Пример #2
0
 public DeepCloneAttribute(DeepCloneBehavior behavior)
 {
     Behavior = behavior;
 }
Пример #3
0
 public DeepCloneAttribute(DeepCloneBehavior behavior)
 {
     Behavior = behavior;
 }